NOT(ColumnName LIKE'%a%')和ColumnName NOT LIKE'%a%'之间是否有区别?

时间:2015-07-22 12:36:40

标签: sql sql-server

我在修改其他人的SQL Server视图时遇到了这个问题。

之间是否存在任何差异:

NOT (ColumnName LIKE '%a%')

ColumnName NOT LIKE '%a%'

是否有任何性能差异或结果有任何差异?或者这只是另一种奇怪的方式(对我来说很奇怪),当您使用“查询”构建器或“视图”构建器时,SQL Server会改变您的代码吗?

1 个答案:

答案 0 :(得分:10)

不,没有区别。

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

大多数情况下,查询的形式对性能并不重要 - 任何时候,你可能会在执行计划程序中查看一个微妙的错误。在查询接近执行之前,它会被撕裂,分析并重建为获得结果所需的实际步骤 - 每当您想知道查询中发生了什么真正时,只需执行包含实际执行计划,你会看到。

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

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

not ColumnName like '%a%'

或更好,

(not ColumnName like '%a%')

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

(not (ColumnName LIKE '%a%'))

使用函数调用语法可能会使某些人感到困惑 - 并且T-SQL中的运算符优先级并不完全直观(它太难以易于使用并且避免使用括号,这有时会让人感到困惑)。大多数SQL生成器都倾向于谨慎,使用更多括号而不是严格必要的,这通常会带来更好的可读性(和正确性:)),同时没有任何有意义的性能影响或任何事情。