所以我有这个查询
select id, col1, len(col1)
from tableA
从那里我想抓住col1中的所有数据,这些数据正好有5个字符并以15开头
select id, col1, len(col1)
from tableA
where col1 like '15___' -- underscore 3 times
现在col1是一个nvarchar(192),有15个和的数据长度为5.但是第二个查询总是显示没有行。
为什么?
答案 0 :(得分:4)
案例可能是该字段是一个大的空字符串?例如"15123 "
您还可以尝试其他解决方案吗?
select id, col1, len(col1)
from tableA
where col1 like '15%' AND Len(col1)=5
编辑 - 未来参考:
为了全面性,char和nchar使用完整的字段大小,因此char(10)将是15________
(“15”+ 8个字符)长,因为它隐式强制大小,而varchar调整大小根据提供的内容15
只是15
。
要解决这个问题,你可以
A)做一个LTRIM / RTRIM来切断所有多余的空间
select id, col1, len(col1)
from tableA
where rtrim(ltrim(col1)) like '15___'
B)LEFT()只能抓住左边的5个字符
select id, col1, len(col1)
from tableA
where left(col1,5) like '15___'
C)作为varchar,一种相当草率的方法
select id, col1, len(col1)
from tableA
where CAST(col1 AS Varchar(192)) like '15___'
答案 1 :(得分:3)
此查询是否会返回任何内容?
select id, col1, len(col1)
from tableA
where len(col1) = 5 and
left(col1, 2) = '15';
如果没有,则没有与该模式匹配的值。而且,我最好的猜测是空格,在这种情况下,这可能会起作用:
select id, col1, len(col1)
from tableA
where ltrim(rtrim(col1)) like '15___';