SQL _通配符未按预期工作。为什么?

时间:2013-12-23 14:54:24

标签: sql sql-server tsql sql-server-2012

所以我有这个查询

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.但是第二个查询总是显示没有行。

为什么?

2 个答案:

答案 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___';