gpt4 book ai didi

SQL 案例上限奇怪的结果

转载 作者:行者123 更新时间:2023-12-03 08:45:56 24 4
gpt4 key购买 nike

有人可以帮助我理解为什么 case 语句([case test v1])会这样表现

select  
case when 0.510 <= 0.5 then '.5' end as [.5 test]
,case when 0.510 <= 0.75 then '.75' end as [.75 test]
,case when 0.510 <= 1 then '1' end as [1 test]
,CEILING(0.510 /.5)*.5 as [ceiling test]
,case
when 0.510 <= 0.5 then '.5'
when 0.510 <= 0.75 then '.75'
when 0.510 <= 1 then '1'
else CEILING(0.510 /.5)*.5
end as [case test v1]
,case
when 0.510 <= 0.5 then '.5'
when 0.510 <= 0.75 then '.75'
when 0.510 <= 1 then '1'
--else CEILING(0.510 /.5)*.5
end as [case test v2]

这是结果

[.5 测试] = NULL
[.75 测试] = .75
[1 次测试] = 1
[上限测试] = 1
[案例测试 v1] = 0.8
[案例测试 v2] = .75

[案例测试 v1] 为什么显示结果 0.8 ...当我注释掉其中的 else 语句时,它按预期工作并显示 0.75(请参阅[案例测试 v2])

我希望通过案例得到的结果是显示这些组中的数据 0.5、0.75、1(然后增加 0.5),因此 1.5、2、2.5、3、3.5 等

PS,值 0.510 只是一个示例,实际上我将使用的列中的值会有所不同

谢谢

最佳答案

因为 CEILING(0.510/.5)*.5 返回 numeric(9,1) 数据类型。

它具有最高的数据类型优先级,因此用作表达式的结果,并且当字符串隐式转换为该值时,您会进行舍入。

为什么在其他分支中使用字符串?如果您使用 .75 SQL Server 会发现它需要为缩放保留两个位置,如下所示(现在返回 numeric(10,2))。

select  
case
when 0.510 <= 0.5 then .5
when 0.510 <= 0.75 then .75
when 0.510 <= 1 then 1
else CEILING(0.510 /.5)*.5
end as [case test v1]

如果有一些使用字符串的正当理由,您需要将numeric分支显式转换为字符串 - 例如如下

select  
case
when 0.510 <= 0.5 then '.5'
when 0.510 <= 0.75 then '.75'
when 0.510 <= 1 then '1'
else CAST(CEILING(0.510 /.5)*.5 AS VARCHAR(10))
end as [case test v1]

关于SQL 案例上限奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61481128/

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