Sql-Server
將十六進制轉換為 varchar
我有一列值保存為十六進制。
當我執行此查詢時:
select column from table where column like '%22639935-KCN%';
這是我得到的輸出:
0x24000000008B010000000089FF32323633393933352D4B434E000000
我想把輸出變成一個varchar。這應該給我一個類似於 like 語句中的值。
到目前為止,我的嘗試是:
SELECT CONVERT(VARCHAR(MAX), 0x24000000008B010000000089FF32323633393933352D4B434E000000) SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), '0x24000000008B010000000089FF32323633393933352D4B434E000000', 2))
但是,我得到了這個結果:
$
如何將此十六進制值轉換為 varchar?
看起來你的 varbinary 字元串被注入了一些廢話。兩個值的所有序列
00
都是空字元,因此這就是您的字元串在轉換時終止的原因。第一個字元是0x24
(美元符號),這就是為什麼輸出只是一個美元符號。SELECT CONVERT(varchar(60), 0x2400....anything....); -- is equivalent to: SELECT CONVERT(varchar(60), 0x24);
現在,如果我把你的字元串去掉所有的
00
序列:SELECT CONVERT(VARCHAR(60), 0x248B0189FF32323633393933352D4B434E);
我得到了一些接近;再一次,那裡有一堆垃圾,但是你要的字元串在那裡:
$‹‰ÿ22639935-KCN
您可以通過僅獲取原始值並對其執行來忽略前導垃圾
RIGHT()
,但這假設字元串的重要部分始終是相同的長度(我們無法告訴您這是否屬實)。SELECT CONVERT(VARCHAR(60), RIGHT(0x24000000008B010000000089FF32323633393933352D4B434E000000, 15));
或使用
SUBSTRING
,但這假設字元串開頭的垃圾總是相同的長度:SELECT CONVERT(VARCHAR(60), SUBSTRING(0x24000000008B010000000089FF32323633393933352D4B434E000000, 14, 46));
我們也無法告訴你為什麼會有這些垃圾,以及它是否有任何額外的含義。您首先需要了解這些值是如何以這種方式編碼的。您想要編碼的值,
22639935-KCN
,應該看起來有點不同varbinary
:SELECT CONVERT(VARBINARY(32), '22639935-KCN'); -------------------------- 0x32323633393933352D4B434E
因此,再次,您需要做一些研究來找出為什麼這個值沒有以這種方式編碼。我們無法回答所有這些問題,因為我們沒有設計您的系統或儲存這些值。