SELECT au_lname, au_fname
FROM authors
WHERE au_lname = 'Green '
au_lname au_fname
---------------------------------------- --------------------
Green Marjorie
SELECT au_lname, au_fname
FROM authors
WHERE au_lname LIKE 'Green '
au_lname au_fname
---------------------------------------- --------------------
谁能解释一下为什么第二个查询没有返回预期的行?
这显然是标准的一个怪癖。不妨明确一下:
SQL Server 遵循 ANSI/ISO SQL-92
规范(第 8.2 节,
,一般规则 #3) 关于如何将字符串与空格进行比较。 ANSI 标准要求
所用字符串的填充
进行比较,以便它们的长度
在比较它们之前先匹配。这
padding直接影响语义
WHERE 和 HAVING 子句谓词
和其他 Transact-SQL 字符串
比较。例如,Transact-SQL 认为字符串 'abc' 和 'abc ' 是等效的对于大多数比较
运营。
此规则的唯一例外是 LIKE 谓词。当右侧
LIKE 谓词表达式具有以下特征:
带有尾随空格的值,SQL
服务器不会将这两个值填充到
比较前长度相同
发生。因为其目的是
LIKE 谓词,根据定义,是
更方便模式搜索
比简单的字符串相等测试,
这并不违反本节
ANSI SQL-92 规范
之前提到。
See here, here and here.
奇怪的是——考虑到“平等”和“喜欢”这两个词,我本以为后者会更自由。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)