首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么MS SQL Server使用'LIKE‘查询返回结果,而使用'=’返回空集

为什么MS SQL Server使用'LIKE‘查询返回结果,而使用'=’返回空集
EN

Stack Overflow用户
提问于 2019-04-16 02:27:04
回答 4查看 236关注 0票数 -1

我正在使用MS SQL Server 2017。在本例中,我有一个具有一个实体full name (varchar(255)的表myTable。

在这个表中,我使用以下参数批量导入了一条记录

(FIELDTERMINATOR = '~',
 ROWTERMINATOR = '0x0A' )

以下查询返回单个记录:

SELECT [full name]
FROM myTable
WHERE [full name] LIKE '%LastName%'

但是,以下查询不会:

SELECT [full name]
FROM myTable
WHERE [full name] = 'Firstname Lastname'

我已经验证了记录的存在,我已经复制了实体的值,以确保数据没有任何滑稽的事情发生。它是干净的,我甚至尝试过这个:

SELECT [full name]
FROM myTable
WHERE [full name] = 'Firstname Lastname ' 

以确保在列的末尾没有随机空格。是什么导致了这样的问题?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-16 03:42:06

我有一个很方便的脚本,可以用来识别不可见的字符;它给出了字符串中的每个字符,但每个字符都是单独的一行。

DECLARE @nstring NVARCHAR(1000)

select top 1 @nstring = [full name]
FROM myTable
WHERE [full name] LIKE '%LastName%'

print @nstring

DECLARE @position INT
 SET @position = 1

DECLARE @CharList TABLE (
 Position INT,
 UnicodeChar NVARCHAR(1),
 UnicodeValue INT
 )

WHILE @position <= DATALENGTH(@nstring)
 BEGIN
 INSERT @CharList
 SELECT @position as Position
 ,CONVERT(nchar(1),SUBSTRING(@nstring, @position, 1)) as UnicodeChar
 ,UNICODE(SUBSTRING(@nstring, @position, 1)) as UnicodeValue
 SET @position = @position + 1
 END

SELECT * FROM @CharList
票数 0
EN

Stack Overflow用户

发布于 2019-04-16 02:29:37

=运算符仅在精确匹配时才起作用

LIKE运算符用于在数据中搜索指定的模式。

因此,在您的示例中,比较值不直接与列值匹配,这就是为什么它不返回任何行,但在类似于它匹配模式的时候,它返回行

票数 0
EN

Stack Overflow用户

发布于 2019-04-16 03:20:23

顾名思义,LIKE主要用于比较表单主要是regular expressions格式的数据

然而,

=只找到完全匹配的内容,而不是说它应该是某种形式,而是=左侧的数据应该是右侧数据的清晰副本。

例如:

根据上面输入的示例..where fullname LIKE %FirstName%。这通常意味着,选择fullname中有名字的数据

如果我替换这个% ...where fullname LIKE FirstName,那么它将与...where fullname = FirstName相同,因为这里它需要精确匹配,而不是某种形式的数据

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55695231

复制
相关文章

相似问题

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