我很困惑,无法找到这两套字符串之间的差异,这对我来说看起来完全一样。我检查了字符串之间是否有空格,但是没有运气。在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')
答案 0 :(得分:6)
其中一个字符串具有两个连续的常规空格,另一个字符串具有不间断空格(字符160十进制0xA0十六进制),后跟一个常规空间(字符32十进制0x20十六进制)。
您可以通过复制和粘贴字符串from here来看到这一点,就像我在这里https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=0dc6ccc48439c3dc27a227aa2dffb4d2
所做的那样0x4154542020363031393753
0x415454A020363031393753
答案 1 :(得分:0)
可能是您的字符串或列具有特殊字符CR或CRLF,请尝试在比较中删除这些字符:
SELECT *
FROM Vendors
WHERE replace(replace(ltrim(rtrim(VendorCode)), char(13), ''), char(10), '') = replace(replace(ltrim(rtrim('SRP 85072B')), char(13), ''), char(10), '')
答案 2 :(得分:0)
此代码使用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, t.n, 1)), t.n from dbo.fnTally(1, len(@string2)) t;
答案 3 :(得分:0)
如果您运行以下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+'%'