2014-10-06 50 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