SQL Server:从字符串中删除0x00字符

Adr*_*ian 0 t-sql sql-server string encoding

我正在比较2个字符串,其中一个是我分配的,第二个是从表中取出的。

我将其转换为十六进制后,表格中的那个显示了“ 00”符号,例如example 1400210068008100。我希望在字符串比较期间删除那些空字符。我尝试使用replace,trim但这并没有帮助我,唯一起作用的是使用LIKE,但这并不安全。

所以我的问题是,如何从从表中获取的字符串中删除不需要的“ 00”字符?

Shn*_*ugo 5

您可能正在混合VARCHAR(1字节扩展ASCII)和NVARCHAR(2字节unicode)编码。看一下这个:

SELECT CAST(N'hello' AS VARBINARY(MAX)) --look at the N in front of the literal!
      ,CAST( 'hello' AS VARBINARY(MAX))

"hello" as NVARCHAR: 0x680065006C006C006F00 
"hello" as VARCHAR:  0x68656C6C6F
Run Code Online (Sandbox Code Playgroud)

将您的二进制文件强制转换为NVARCHAR(MAX),先将其强制转换VARCHAR(MAX)为VARBINARY(MAX)。

更新

最好将字符串扩展为不包含双零,NVARCHAR(MAX)然后以unicode为基础进行比较。否则,如果您的字符串包含特殊字符(例如0x14...),则可能会遇到麻烦