sql – 如果列数据以numeric开头,则类似操作在nvarchar列过滤器上不返回任何行

前端之家收集整理的这篇文章主要介绍了sql – 如果列数据以numeric开头,则类似操作在nvarchar列过滤器上不返回任何行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在sql Server表中有nvarchar(50)列,数据如下:
123abc
234abc
456abc

我的查询

select * 
from table 
where col like '%abc'

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

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

有任何想法吗?

解决方法

您可能在数据末尾有空格.看看这个例子.
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'

当您运行上面的代码时,您将只获得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'

根据有关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兼容.

猜你在找的MsSQL相关文章