如何解决这两个字符串之间有什么区别?
我很困惑,无法找到这两套字符串之间的差异,这对我来说看起来完全一样。我检查了字符串之间是否有空格,但是没有运气。在SQL Management Studio中的查询下方运行时,只有其中一个返回结果...请帮助,谢谢。
--return row
SELECT * FROM Vendors WHERE VendorCode = 'SRP 85072B'
--does not return row
SELECT * FROM Vendors WHERE VendorCode = 'SRP 85072B'
--return rows
SELECT * FROM Vendors WHERE VendorCode IN (
'ATT 60197S','GMI 98661A')
--does NOT RETURN rows
SELECT * FROM Vendors WHERE VendorCode IN (
'ATT 60197S','GMI 98661A')
解决方法
其中一个字符串具有两个连续的常规空格,另一个字符串具有不间断空格(字符160十进制0xA0十六进制),后跟一个常规空间(字符32十进制0x20十六进制)。
您可以通过复制和粘贴字符串from here来看到这一点,就像我在这里https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=0dc6ccc48439c3dc27a227aa2dffb4d2
所做的那样0x4154542020363031393753
0x415454A020363031393753
,
可能是您的字符串或列具有特殊字符CR或CRLF,请尝试在比较中删除这些字符:
SELECT *
FROM Vendors
WHERE replace(replace(ltrim(rtrim(VendorCode)),char(13),''),char(10),'') = replace(replace(ltrim(rtrim('SRP 85072B')),'')
,
此代码使用tally table将两个字符串分开,将每个字符转换为其ascii值,然后返回差异。
declare
@string1 nvarchar(200)='zdq%E^&$DGE%^#((',@string2 nvarchar(200)='zdq%E^&$DGx%^#((';
select ascii(SUBSTRING(@string1,t.n,1)),t.n from dbo.fnTally(1,len(@string1)) t
except
select ascii(SUBSTRING(@string2,len(@string2)) t;
,
如果您运行以下sql查询,它们看起来很相似
DECLARE @first nvarchar(max) = 'SELECT * FROM Vendors WHERE VendorCode = ''SRP 85072B''',@second nvarchar(max) = 'SELECT * FROM Vendors WHERE VendorCode = ''SRP 85072B'''
IF (@first = @second)
SELECT 'Similar';
ELSE
SELECT 'Not Similar';
如果参数来自同一来源,则可以使用以下查询进行检查
DECLARE @param nvarchar(max) = 'SRP 85072B'
SELECT * FROM Vendors WHERE VendorCode like '%'+ @param+'%'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。