Sql server SQL Server:正在从字符串中删除0x00字符
我正在比较两个字符串,其中一个字符串由我指定,第二个字符串取自一个表 表中的一个,在我将其转换为十六进制后,显示“00”符号,如示例Sql server SQL Server:正在从字符串中删除0x00字符,sql-server,string,tsql,encoding,Sql Server,String,Tsql,Encoding,我正在比较两个字符串,其中一个字符串由我指定,第二个字符串取自一个表 表中的一个,在我将其转换为十六进制后,显示“00”符号,如示例1400210068008100。我希望在字符串比较期间删除这些空字符。我试着使用replace和trim但这对我没有帮助,唯一有效的方法是像那样使用,但这并不安全 所以我的问题是,如何从我从表中获取的字符串中删除不需要的“00”字符?您可能混合了VARCHAR(1字节扩展ASCII)和NVARCHAR(2字节unicode)编码。看看这个: SELECT CAST
1400210068008100
。我希望在字符串比较期间删除这些空字符。我试着使用replace
和trim
但这对我没有帮助,唯一有效的方法是像那样使用,但这并不安全
所以我的问题是,如何从我从表中获取的字符串中删除不需要的“00”字符?您可能混合了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
将二进制文件转换为NVARCHAR(MAX)
,将其转换为VARCHAR(MAX)
,然后转换为VARBINARY(MAX)
更新
最好将字符串扩展为NVARCHAR(MAX)
,而不使用双零,并在unicode基础上进行比较。否则,如果您的字符串包含特殊字符(如0x14
…)您可能混合了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
将二进制文件转换为NVARCHAR(MAX)
,将其转换为VARCHAR(MAX)
,然后转换为VARBINARY(MAX)
更新
最好将字符串扩展为NVARCHAR(MAX)
,而不使用双零,并在unicode基础上进行比较。否则,如果字符串包含特殊字符(如0x14
…)是否要删除所有尾随的零或其他字符?所有空字符显示是否将00
从数字中的合法序列中区分为空?这个问题感觉不对。结尾总是“00”还是可以是“000”/“0000”?结尾总是“00”?是否要删除所有尾随的零或其他?所有空字符显示您是否将00
从数字中的合法序列中区分为空?这个问题感觉不对。结尾总是“00”还是可以是“000”/“0000”?结尾总是00你的答案更相关:+1你的答案更相关:+1