首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于%和=与<>之间缺乏兼容性的深奥思考

关于%和=与<>之间缺乏兼容性的深奥思考
EN

Stack Overflow用户
提问于 2017-03-11 04:53:00
回答 3查看 41关注 0票数 0

我是新来的编程世界,但请幽默我。

我知道%与喜欢工作,而不是喜欢。例如,以下两个查询可以工作:

代码语言:javascript
复制
--QUERY 1
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID NOT LIKE 'C%'

--QUERY 2
SELECT *
FROM TrumpFeccandid_Pacs
WHERE PACID LIKE 'C%'

但是%不适用于=或<>。例如,以下两个查询不起作用:

代码语言:javascript
复制
--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。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-11 06:34:59

映射一个相对简单的查询,如以下所示:

代码语言:javascript
复制
SELECT *
FROM A
JOIN B ON A.Name = B.Name

如果=LIKE一样工作,如果Name包含一个百分比或下划线,上帝会帮助你!

票数 1
EN

Stack Overflow用户

发布于 2017-03-11 06:34:06

直觉地说,我觉得

那就是你要出错的地方!

LIKE是以特定的方式定义的,=<>也是如此。设计这种语言的人想必试图使其易于使用,使其易于理解、记忆和使用。他们没有做的,因为他们做不到,是定义它,使它满足每个人的期望和预感。

为什么LIKE=不同?

  • 如果a like 'C%'以'C‘开头,则a为真
  • 如果a = 'C%'恰好是两个字母字符串'C%‘,则a为真

但这个故事的真正寓意是,如果你想知道语言是如何工作的,最好的建议是RTFM。尤其是当它不像预期的那样工作的时候。

票数 1
EN

Stack Overflow用户

发布于 2017-03-11 05:37:01

SQL提供标准模式匹配,如Unix、grep、sed中使用的模式匹配。这些模式只能用于操作人员“喜欢”和“不喜欢”……类似/不像是布尔类型,也就是说,如果match_expression与指定的模式匹配,则返回TRUE/FALSE。

以下是用于匹配图案的各种通配符:

代码语言:javascript
复制
% = Any number of characters
_ = Any Single character 
[] = Any single character within the specified range 
[^] = Any single character not within the specified range

关于模式和类似操作符的文档:类SQL服务器操作符

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

https://stackoverflow.com/questions/42731489

复制
相关文章

相似问题

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