加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如果列数据以numeric开头,则类似操作在nvarchar列过滤器

发布时间:2020-12-12 16:21:44 所属栏目:MsSql教程 来源:网络整理
导读:我在SQL Server表中有nvarchar(50)列,数据如下: 123abc234abc456abc 我的查询: select * from table where col like '%abc' 预期结果:应返回所有行 实际结果:不返回任何行 如果列是varchar则工作正常但如果类型为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兼容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读