我是新来的编程世界,但请幽默我。
我知道%与喜欢工作,而不是喜欢。例如,以下两个查询可以工作:
--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。
这些示例使用的是Server 2016中的These。
发布于 2017-03-11 06:34:59
映射一个相对简单的查询,如以下所示:
SELECT *
FROM A
JOIN B ON A.Name = B.Name如果=像LIKE一样工作,如果Name包含一个百分比或下划线,上帝会帮助你!
发布于 2017-03-11 06:34:06
直觉地说,我觉得
那就是你要出错的地方!
LIKE是以特定的方式定义的,=和<>也是如此。设计这种语言的人想必试图使其易于使用,使其易于理解、记忆和使用。他们没有做的,因为他们做不到,是定义它,使它满足每个人的期望和预感。
为什么LIKE和=不同?
a like 'C%'以'C‘开头,则a为真a = 'C%'恰好是两个字母字符串'C%‘,则a为真但这个故事的真正寓意是,如果你想知道语言是如何工作的,最好的建议是RTFM。尤其是当它不像预期的那样工作的时候。
发布于 2017-03-11 05:37:01
SQL提供标准模式匹配,如Unix、grep、sed中使用的模式匹配。这些模式只能用于操作人员“喜欢”和“不喜欢”……类似/不像是布尔类型,也就是说,如果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服务器操作符
https://stackoverflow.com/questions/42731489
复制相似问题