首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NOT (ColumnName喜欢%a%)和ColumnName不像%a%有区别吗?

NOT (ColumnName喜欢%a%)和ColumnName不像%a%有区别吗?
EN

Stack Overflow用户
提问于 2015-07-22 12:36:40
回答 1查看 156关注 0票数 8

我在修改Server中其他人的视图时遇到了这种情况。

在以下方面是否有任何区别:

代码语言:javascript
复制
NOT (ColumnName LIKE '%a%')

代码语言:javascript
复制
ColumnName NOT LIKE '%a%'

结果是否有任何性能差异或差异?或者这仅仅是SQL Server在使用查询生成器或视图构建器时更改代码的另一种奇怪的方式(无论如何,我还是感到奇怪)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-22 12:38:52

不,没什么区别。

这两种语法都是有意义的-- not like更清晰,但在这种情况下,您不能仅仅禁用not (一个简单的一元布尔运算符)。

大多数情况下,查询的形式对性能并不重要--无论何时,您可能都在查看执行计划器中的一个微妙的bug。在查询接近于执行之前,它被分解、分析并重新构建成获得结果所需的实际步骤--每当您想知道查询中到底发生了什么事情时,只要使用包含实际执行计划来执行它,您就会看到。

如果你是人类,没有什么理由不使用not like --你通常会使用其他方式作为自动生成代码的一部分(否定另一个表达式的结果),而不是在人类编写的代码中。当然,除非您是通过将字符串放在一起构建该查询,否则即使您自己编写它,它也可能是有意义的。

哦,至于样式,请注意,正如我所说的,not是一个运算符,而不是一个函数调用。所以正确的使用括号的方法是

代码语言:javascript
复制
not ColumnName like '%a%'

或者更好

代码语言:javascript
复制
(not ColumnName like '%a%')

或者,如果您疯了(或者再次生成代码):

代码语言:javascript
复制
(not (ColumnName LIKE '%a%'))

使用函数调用语法可能会让某些人感到困惑,而too中的操作符优先级并不完全是直观的(它很难使用并避免括号,有时会有些混淆)。大多数SQL生成器倾向于谨慎,使用比严格需要的括号更多的括号,这通常会带来更好的可读性(和正确性:),而不会产生任何有意义的性能影响或任何东西。

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

https://stackoverflow.com/questions/31563389

复制
相关文章

相似问题

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