今天用户让我帮忙查询一个值,我查询了半天无法查询出来,脚本如下
--查出1行数据
select * from TB where sonumber =154532157
--空白无数据
select * from TB where sonumber =154532157 and TrackingNumber = N'028114715084630'
--查出1行数据
select * from TB where sonumber =154532157 and
TrackingNumber like N'028114715084630%'
--空白,注意此处TrackingNumber是我从前面结果集中ctrl+c方式拷贝出来得
select * from TB where sonumber =154532157 and
TrackingNumber = N'028114715084630 '
--空白
select * from TB where sonumber =154532157 and
TrackingNumber =cast( N'028114715084630 ' as nchar(40))
到现在基本可以确定TrackingNumber存在无法拷贝的字符,于是我写了一个脚本输出它
declare @tb table (id int identity(1,1),col1 nchar(1))
declare @i int =0
declare @tmp nchar(40)
select top 1 @tmp=TrackingNumber from TB where sonumber =154532157
while (@i<=40)
begin
insert into @tb
select SUBSTRING(@tmp,@i,1)
print @i
set @i=@i+1
end
select id, UNICODE (col1), col1, from @tb
--------------------------
48 0
50 2
56 8
49 1
49 1
52 4
55 7
49 1
53 5
48 0
56 8
52 4
54 6
51 3
48 0
9
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
---------------------------------
这下我们就知道是存在一个不可见得尾巴nchar(9)了
如此
--成功查询出数据
select * from TB where sonumber =154532157 and
TrackingNumber =cast( N'028114715084630'+nchar(9) as nchar(40))
以下为简单得错误重现
declare @tb table (col1 char(10))
insert into @tb
select N'A'+NCHAR(9)
select * from @tb
select * from @tb
where col1=N'A'
select * from @tb
where col1=CAST(N'A' AS NCHAR(10))
select * from @tb
where col1=N'A '
select * from @tb
where col1=N'A'+NCHAR(9)
问题解决,这个经历告诉我们ctrl+c并没有我们想象中可靠
这个问题是在英文环境中出现,后续我会再中文环境中继续测试,看是否存在同样问题