使用替换和转换与varbinary

时间:2014-10-06 22:19:49

标签: sql sql-server tsql varbinary

我需要一个查询,它将在varbinary中找到字符串的一部分并删除字符串的请求部分

例如,我的表dbo.inventory_table必须包含CharacterIdx和Data列。 数据是包含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

     

不允许从数据类型varchar到varbinary的隐式转换。

     

使用CONVERT函数运行此查询。

我需要字符串保留varbinary。

1 个答案:

答案 0 :(得分:1)

我相信您需要将其转换回varbinary,因为replace会从隐式转换中返回varchar值。试试这个:

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

在我的服务器上,这会将值更改为:

0x210500000000000043000000000000000000