2014-10-06 53 views
0

轉換,我需要一個查詢,將在VARBINARY找到一個字符串的一部分,並刪除在字符串使用替換並與VARBINARY

例如我的表dbo.inventory_table已列CharacterIdx和數據的請求的一部分。 數據是目標列包含VARBINARY所以characteridx 101756數據是這樣的

0x2105000000000000430000000000000000003C090000000000002C0100000200000000F83D09000000000000580200000400000000F83E09000000000000E80300000600000000F8 

我希望查詢以查找並刪除

3C090000000000002C0100000200000000F83D09000000000000580200000400000000F83E09000000000000E80300000600000000F8 

,但留下

0x210500000000000043000000000000000000 

其中CharacterIdx = 101756

我試過

UPDATE [dbo].[Inventory_table] 
SET Data = REPLACE(Data, '3C090000000000002C0100000200000000F83D09000000000000580200000400000000F83E09000000000000E80300000600000000F8', '') 
WHERE CharacterIdx = 101756 

但它給我一個錯誤:

Msg 257, Level 16, State 3, Line 3

Implicit conversion from data type varchar to varbinary is not allowed.

Use the CONVERT function to run this query.

我需要的字符串,雖然仍然VARBINARY。

+0

作爲REPLACE'的'第二個參數,使用'0x',而不是'「」'。你也不應該把第一個參數放在引號之間;代替這個,用「0x」作爲前綴。 http://stackoverflow.com/questions/24494778/how-to-perform-a-replace-on-varbinary-data-in-sql – 2014-10-06 22:32:44

+0

那些'000000'也可能會導致你的問題。因爲這是一個NULL字符。你可能需要'COLLATE Latin1_General_100_BIN2' – 2014-10-06 22:50:11

回答

1

我相信您需要將其轉換回varbinary,因爲replace會從隱式轉換中返回varchar值。試試這個:

UPDATE [dbo].[Inventory_table] 
SET Data = CAST(REPLACE(Data, 0x3C090000000000002C0100000200000000F83D09000000000000580200000400000000F83E09000000000000E80300000600000000F8, 0x) AS varbinary) 
WHERE CharacterIdx = 101756 

我的服務器上此的值變化:

0x210500000000000043000000000000000000 
+0

是的即時即時嘗試獲得,但該查詢並沒有刪除其餘的,但它運行成功 – 2014-10-06 23:06:27

+0

@NathanAguliar你在我最後一次編輯後嘗試嗎? – jpw 2014-10-06 23:07:59

+0

哦與0x修訂?現在不讓我試試 – 2014-10-06 23:09:00