我在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兼容.