如果列数据以numeric开头,则类似操作返回nvarchar列过滤器上没有行

pot*_*ddy 1 sql sql-server-2008

nvarchar(50)在SQL Server表和数据列中有这样的列:

123abc
234abc
456abc
Run Code Online (Sandbox Code Playgroud)

我的查询:

select * 
from table 
where col like '%abc'
Run Code Online (Sandbox Code Playgroud)

预期结果:应返回所有行实际结果:不返回任何行

如果列是正常工作,varchar但如果类型是,则不返回任何行nvarchar.

有任何想法吗?

G M*_*ros 8

您可能在数据末尾有空格.看看这个例子.

Declare @Temp Table(col nvarchar(50))

Insert Into @Temp(col) Values(N'123abc')
Insert Into @Temp(col) Values(N'456abc ')

Select * From @Temp Where Col Like '%abc'
Run Code Online (Sandbox Code Playgroud)

当您运行上面的代码时,您将只获得123行,因为456行在其末尾有一个空格.

运行下面显示的代码时,您将获得所需的数据.

Declare @Temp Table(col nvarchar(50))

Insert Into @Temp(col) Values(N'123abc')
Insert Into @Temp(col) Values(N'456abc ')

Select * From @Temp Where rtrim(Col) Like '%abc'
Run Code Online (Sandbox Code Playgroud)

根据关于LIKE在线书籍(强调我的)的文档:http: //msdn.microsoft.com/en-us/library/ms179859.aspx

使用LIKE进行模式匹配

LIKE支持ASCII模式匹配和Unicode模式匹配.当所有参数(match_expression,pattern和escape_character,如果存在)是ASCII字符数据类型时,将执行ASCII模式匹配.如果任何一个参数是Unicode数据类型,则所有参数都将转换为Unicode并执行Unicode模式匹配.在LIKE中使用Unicode数据(nchar或nvarchar数据类型)时,尾随空白很重要 ; 但是,对于非Unicode数据,尾随空白并不重要.Unicode LIKE与ISO标准兼容.ASCII LIKE与早期版本的SQL Server兼容.


小智 6

对于nvarchar类型,您可以使用这样的选择:-

select * from Table where ColumnName like N'%abc%'
Run Code Online (Sandbox Code Playgroud)