gpt4 book ai didi

sql - 为什么 SQL Server 中的输出不同而 Oracle 中的输出相同?

转载 作者:行者123 更新时间:2023-12-03 00:13:50 27 4
gpt4 key购买 nike

为什么下面两个查询的输出在 SQL Server 中不同而在 Oracle 中相同?

SELECT 20.0/-2.0/5

SELECT 20/(-2.0)/5

最佳答案

我不同意你关于输出应该相同的说法。
如果你问我 20/-2/5 多少输出,我会回答你它可以输出 -2 或 -50,取决于实现细节。

In Oracle ,您唯一知道的是运算符“*”和“/”在“+”和“-”之前计算。但仅此而已。我没有找到任何关于运算符“*”和“/”之间的优先级的文档。
由于两次查询都给出-2,因此可以假设括号被剩下,并且从左到右进行计算。

In SQL Server, the docs specified that

When two operators in an expression have the same operator precedence level, they are evaluated left to right based on their position in the expression.

所以这个计算符合规范:

20/2/5 = (20/2)/5 = 2

现在添加减号

20/-2/5 = 20/(-2/5) = -50

再次添加括号

20/(-2)/5 = (20/-2)/5 = -2

因此,不仅括号改变了顺序,减号也改变了顺序。

事实上,结果应该被视为未定义,你不能依赖它。
添加一些括号以获得明确的结果并防止头痛。

关于sql - 为什么 SQL Server 中的输出不同而 Oracle 中的输出相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15811720/

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