gpt4 book ai didi

sql-server - SQL Server Modulo 函数似乎返回超出预期范围的值

转载 作者:行者123 更新时间:2023-12-03 14:19:14 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How does this CASE expression reach the ELSE clause?

(3 个回答)


5年前关闭。




在 case 语句中运行模函数时,很多时候会返回超出预期范围的值。

SELECT CASE WHEN ABS(CheckSUM(NewId())) % 5 IN (0,1,2,3,4) then NULL 
ELSE 'What Happened?' END

如果您多次运行此脚本,您会看到结果有时会超出 0、1、2、3、4 的范围。我的想法是,这在 case 语句中以某种方式返回了非整数值,导致模数成为一种无效的按大小写排序方法。

有人可以解释在这些情况下发生了什么,以便我将来可以解决这个问题吗?

注意:如果我自己运行代码模函数(在 case 语句之外)并返回结果,所有值都在 0、1、2、3、4 的范围内,如预期的那样。

最佳答案

将您的声明更改为

SELECT top(1)
CASE WHEN ABS(CheckSUM(NewId())) % 5 IN (0,1,2,3,4) then NULL
ELSE 'What Happened?' END

并查看实际执行计划。
IN案例中的一部分被扩展到。
CASE WHEN abs(checksum(newid()))%(5)=(4) OR 
abs(checksum(newid()))%(5)=(3) OR
abs(checksum(newid()))%(5)=(2) OR
abs(checksum(newid()))%(5)=(1) OR
abs(checksum(newid()))%(5)=(0)
THEN NULL
ELSE 'What Happened?'
END
abs(checksum(newid()))%(5)对 in 子句中的每个值执行一次。

关于sql-server - SQL Server Modulo 函数似乎返回超出预期范围的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35163902/

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