2014-10-01 14 views
0

我正在處理一個數據庫,將字符串編碼爲十六進制,然後用0填充整個字符串。插入/刪除使用SQL Server 2008 R2的十六進制填充?

像這樣:

Origional String:   PartitionTest 
JUST Hex-encoded Strring: 0x506172746974696f6e54657374 
The output I see:   0x50006100720074006900740069006F006E005400650073007400 

反正我把空格去掉,最終字符串解碼回短信?然後,我如何將文本編碼回填充字符串?我已經將字符串轉換爲十六進制

SELECT 
    MASTER.dbo.fn_varbintohexstr(CAST('PartitionTest' AS VARBINARY)) 

但我沒有線索如何填補這一結果。

謝謝!

+0

所以你需要推後00每兩個字符開始後第三?這是多麼奇怪的事情。你可以用STUFF做到這一點。 – 2014-10-01 14:38:33

回答

0

編輯: 由於輸入是varbinary,需要先將其轉換爲varchar以使用STUFF。

Declare @input varbinary(128) = 0x50006100720074006900740069006F006E005400650073007400 
Declare @Temp as VARCHAR(350) 
Set @Temp = CONVERT(VARCHAR(350), @input ,2) 
declare @length int 
set @length = len(@Temp) 
select @length 
declare @i int = 3 


WHILE @i < @length/2+2 
BEGIN 
    Set @Temp = Stuff(@Temp, @i, 2, '') 
    set @i = @i +2 

END 

select '0x' + @Temp 
+0

這很好的刪除填充,但我可以使用什麼來添加它?謝謝! – 2014-10-01 17:46:11

+0

我想我可以做一些像'CONVERT(VARCHAR(128),(SELECT [FLDVALUE] FROM TABLE WHERE RESOURCE_TYPE = 4),1)',然後在需要時轉換回VARBINARY。 – 2014-10-01 17:58:59

+0

此外,我只是嘗試修改您的答案,如下所示:SET @Temp =(SELECT [FLDVALUE] FROM TABLE WHERE RESOURCE_TYPE = 4)並且由於某種原因,您的答案的結果是第一個編碼字母(0x50)代表的字母。結果是標記爲VARBINARY(128)的列中的一個項目。在通過答案運行之前是否需要轉換爲其他類型? – 2014-10-01 17:59:27