我是编程世界的新手,但请尽可能地幽默我。
我知道%可以使用LIKE而不是LIKE。例如,以下两个查询有效:
--QUERY 1
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID NOT LIKE 'C%'
--QUERY 2
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID LIKE 'C%'
但%不适用于=或<&gt ;.例如,以下两个查询不起作用:
--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。
答案 0 :(得分:1)
直观地说我觉得
这就是你出错的地方!
LIKE
以某种方式定义,=
和<>
也是如此。大概设计这种语言的人试图让它易于理解,以便于理解,记忆和使用。他们没有做的,因为他们做不到,就是定义它,以满足每个人的期望和预感。
为什么LIKE
与=
不同?
a like 'C%'
以&#39; C&#39; 开头,则a
为真
如果a = 'C%'
正好是2个字母的字符串,那么a
为真&#39; C%&#39; 但IMO这个故事的真正道德是,如果你想知道语言是如何运作的,最好的建议是RTFM。特别是当它没有按预期工作时。
答案 1 :(得分:1)
想象一个像这样的相对简单的查询:
SELECT *
FROM A
JOIN B ON A.Name = B.Name
如果=
像LIKE
一样工作,如果Name
包含百分比或下划线,上帝会帮助您!
答案 2 :(得分:0)
SQL提供了与Unix,grep,sed中使用的标准模式匹配。这些图案只能用于“喜欢”和“不喜欢”的操作员..... LIKE / NOT LIKE是布尔类型,如果match_expression与指定的模式匹配,它们返回TRUE / FALSE。
以下是用于匹配模式的各种外卡:
% = 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