gpt4 book ai didi

sql-server - 位运算符优先级

转载 作者:行者123 更新时间:2023-12-04 18:16:46 25 4
gpt4 key购买 nike

我刚刚在 MSSQL 中遇到了让我困惑的问题。
如果我这样做:
SELECT 1 | 0 & 0
输出为 0 - 我会认为 &运算符将优先于 |运算符(operator)。

有任何想法吗 ?这是 MSSQL 中的错误还是预期行为?

最佳答案

根据SQL Server operator precedence table (SQL2k8+)正如@MartinSmith 已经在评论中引用了它,这就是优先级的样子:

Level Operators

1 ~ (Bitwise NOT)
2 * (Multiply), / (Division), % (Modulo)
3 + (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR)
4 =, >, <, >=, <=, <>, !=, !>, !< (Comparison operators)
5 NOT
6 AND
7 ALL, ANY, BETWEEN, IN, LIKE, OR, SOME
8 = (Assignment)

当表达式中的两个运算符具有相同的运算符优先级时,将根据它们在表达式中的位置从左到右计算它们。

您对按位运算符的问题

如您所见,按位运算符都在同一级别(3),这就是从左到右评估它们的原因,因此在您的示例中 |首先评估,然后 & .

bool 逻辑运算符不同

这些当然是按位运算符而不是逻辑运算符,因为 AND 之后,它们当然会以正确的顺序进行计算。有 6 级和 OR有 7 个。这意味着 AND将首先被评估, OR然后。

括号当然是任何非平凡表达式的首选。在您的情况下,是的,这似乎微不足道,因此没有使用括号,但是由于按位运算符在同一级别上运行,因此在组合至少 3 个操作数时必须使用它们 确保以您希望他们评估的方式订购运营商。在你的情况下:
select 0 & 0 | 1

会产生正确的结果。

并不总是这样

位运算符优先级已均衡 自 SQL Server 2008 . SQL Server 2005更老的有按位 | (以及排他性或 ^ )在较低级别 (5),因此您的表达式将正确评估。为什么微软决定将所有位运算符放在同一级别上对我来说是个谜。

原来 SQL Books Online were stating invalid real life processing (感谢@MartinSmith)。所以他们刚刚更新了 SQL Server 2008 的运算符优先级文档页面。显然,这种方式已经工作了很长时间(也许一直如此)。

关于sql-server - 位运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11501907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com