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.
有任何想法吗?
您可能在数据末尾有空格.看看这个例子.
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)