首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果列数据以numeric开头,则Like操作在nvarchar列过滤器上不返回任何行

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

Stack Overflow用户
提问于 2012-04-18 06:27:27
回答 6查看 18K关注 0票数 2

我在SQL Server表中有nvarchar(50)列,数据如下:

代码语言:javascript
运行
复制
123abc
234abc
456abc

我的问题是:

代码语言:javascript
运行
复制
select * 
from table 
where col like '%abc'

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

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

有什么想法吗?

EN

Stack Overflow用户

发布于 2012-04-18 06:33:37

您确定值的末尾没有空格吗?您可以这样做来删除空格:

代码语言:javascript
运行
复制
select *
from yourTable
where rtrim(yourcolumn) like '%abc'

如果您不想同时使用RTRIMLIKE,也可以使用:

代码语言:javascript
运行
复制
Select * 
From yourTable 
Where charindex('abc', col) > 0

来自微软关于使用LIKE的信息

有关如何比较字符串和空格,

SQL Server遵循ANSI/ISO 92规范(第8.2节,一般规则#3)。ANSI标准要求对比较中使用的字符串进行填充,以便在比较它们之前使它们的长度匹配。填充直接影响WHERE和HAVING子句谓词的语义以及其他Transact-SQL字符串比较。例如,对于大多数比较操作,Transact-SQL认为字符串'abc‘和'abc’是等效的。

此规则的唯一例外是LIKE谓词。当LIKE谓词表达式的右侧具有带尾随空格的值时,SQL Server在进行比较之前不会将这两个值填充到相同的长度。因为根据定义,LIKE谓词的目的是促进模式搜索,而不是简单的字符串相等测试,所以这并不违反前面提到的ANSI SQL-92规范的一节。

如果您知道'abc‘字符串的起始位置,则可以使用SUBSTRING

代码语言:javascript
运行
复制
Select *
From yourTable 
Where substring(Col, 4, 3) = 'abc'

但是,您可以同时使用charindex和substring,而不必担心空格:

代码语言:javascript
运行
复制
select *
from yourTable
where substring(col, charindex('abc', col), 3) = 'abc'
票数 1
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10200125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档