【问题标题】:Using Replace And Convert with varbinary将替换和转换与 varbinary 一起使用
【发布时间】:2014-10-06 22:19:48
【问题描述】:

我需要一个查询,它会在 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

但它给了我一个错误:

消息 257,第 16 级,状态 3,第 3 行

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

使用 CONVERT 函数运行此查询。

我需要字符串保持 varbinary。

【问题讨论】:

  • 作为REPLACE的第二个参数,使用0x代替''。您也不应该将第一个参数放在引号之间;而不是这个,在它前面加上0xstackoverflow.com/questions/24494778/…
  • 那些000000 也可能会给你带来麻烦。因为那是一个 NULL 字符。你可能需要COLLATE Latin1_General_100_BIN2

标签: sql sql-server tsql varbinary


【解决方案1】:

我相信您需要将其转换回 varbinary asreplacereturns avarcharvalue 从隐式转换。试试这个:

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

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

0x210500000000000043000000000000000000

【讨论】:

  • 是的,这就是我想要得到的,但该查询没有删除其余部分,但它运行成功
  • 哦,使用 0x 版本?不让我现在试试
猜你喜欢
  • 1970-01-01
  • 2018-07-30
  • 2013-10-17
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
相关资源
最近更新 更多