关于 % 和 = 和 <> 之间缺乏兼容性的深奥思考
An esoteric pondering regarding the lack of compatibility between % and = and <>
我是编程界的新手,但请多多包涵。
我知道 % 适用于 LIKE 和 NOT LIKE。例如,以下两个查询有效:
--QUERY 1
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID NOT LIKE 'C%'
--QUERY 2
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID LIKE 'C%'
但是 % 不适用于 = 或 <>。例如,以下两个查询不起作用:
--QUERY A
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID <> 'C%'
--QUERY B
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACD = 'C%'
为什么会这样?直观地说,我觉得不仅查询 A 和 B 应该有效,而且查询 A 应该等同于查询 1,查询 B 应该等同于查询 2。
这些示例使用的是来自 Sql Server 2016 的 T-SQL。
SQL 提供标准模式匹配,如 Unix、grep、sed 中使用的模式匹配。这些模式只能与运算符 "LIKE" 和 "NOT LIKE" 一起使用......
LIKE/NOT LIKE 是布尔类型,即它们 returns TRUE/FALSE 如果 match_expression 匹配指定的模式。
以下是用于匹配模式的各种通配符:
% = Any number of characters
_ = Any Single character
[] = Any single character within the specified range
[^] = Any single character not within the specified range
关于模式和类似运算符的文档:
SQL server LIKE operator
Intuitively speaking I feel like
这就是你出错的地方!
LIKE
是 定义的 某种方式,=
和 <>
也是如此。设计这种语言的人可能试图让它易于理解,让它易于理解、记忆和使用。他们没有做的,因为他们做不到,就是定义它以满足每个人的期望和预感。
为什么 LIKE
与 =
不同?
如果 a
以 'C' 开头,则 a like 'C%'
为真
如果 a
恰好是 2 个字母的字符串 'C%' ,则 a = 'C%'
为真
但 IMO 这个故事的真正寓意是,如果您想了解该语言的工作原理,最好的建议是 RTFM。特别是当它没有按预期工作时。
像这样一个相对简单的查询:
SELECT *
FROM A
JOIN B ON A.Name = B.Name
如果 =
像 LIKE
一样工作,如果 Name
包含百分号或下划线,上帝会帮助你!
我是编程界的新手,但请多多包涵。
我知道 % 适用于 LIKE 和 NOT LIKE。例如,以下两个查询有效:
--QUERY 1
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID NOT LIKE 'C%'
--QUERY 2
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID LIKE 'C%'
但是 % 不适用于 = 或 <>。例如,以下两个查询不起作用:
--QUERY A
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID <> 'C%'
--QUERY B
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACD = 'C%'
为什么会这样?直观地说,我觉得不仅查询 A 和 B 应该有效,而且查询 A 应该等同于查询 1,查询 B 应该等同于查询 2。
这些示例使用的是来自 Sql Server 2016 的 T-SQL。
SQL 提供标准模式匹配,如 Unix、grep、sed 中使用的模式匹配。这些模式只能与运算符 "LIKE" 和 "NOT LIKE" 一起使用...... LIKE/NOT LIKE 是布尔类型,即它们 returns TRUE/FALSE 如果 match_expression 匹配指定的模式。
以下是用于匹配模式的各种通配符:
% = Any number of characters
_ = Any Single character
[] = Any single character within the specified range
[^] = Any single character not within the specified range
关于模式和类似运算符的文档: SQL server LIKE operator
Intuitively speaking I feel like
这就是你出错的地方!
LIKE
是 定义的 某种方式,=
和 <>
也是如此。设计这种语言的人可能试图让它易于理解,让它易于理解、记忆和使用。他们没有做的,因为他们做不到,就是定义它以满足每个人的期望和预感。
为什么 LIKE
与 =
不同?
-
如果
a like 'C%'
为真 如果a
恰好是 2 个字母的字符串 'C%' ,则 a = 'C%'
为真
a
以 'C' 开头,则 但 IMO 这个故事的真正寓意是,如果您想了解该语言的工作原理,最好的建议是 RTFM。特别是当它没有按预期工作时。
像这样一个相对简单的查询:
SELECT *
FROM A
JOIN B ON A.Name = B.Name
如果 =
像 LIKE
一样工作,如果 Name
包含百分号或下划线,上帝会帮助你!