我的SQL脚本出现错误:
将数字转换为数据类型数字
的算术溢出错误
select x.MemberName,x.DOB,x.FilePath,x.Medication,x.NDC,x.Directions,x.Name,x.Strength,x.GenericName,x.QtyOrdered,x.DaysSupply,x.DateFilled,
CASE
WHEN x.test = 0 THEN 'N/A'
WHEN compliance > 100.0 THEN '100.0'
ELSE CONVERT(VARCHAR(5), CAST(FLOOR(compliance *10)/10.0 AS DECIMAL(3,1)))
END as [Compliance]
我正在上面的语法行面临错误。
答案 0 :(得分:7)
这是你的问题:
declare @compliance decimal(10,5)
set @compliance = 100.0 -- <----------------
select CAST(FLOOR(@compliance *10)/10.0 AS DECIMAL(3,1))
引发“将数字转换为数据类型数字的算术溢出错误”错误。更改为DECIMAL(4,1)
有效,或@paola建议,将您的条件更改为>= 100.0
decimal(p,s):
p(precision)是最大的小数位数 存储在小数点的左侧和右侧。该 precision必须是从1到最大精度为38的值。 默认精度为18。
s(scale)是将存储到的小数位数 小数点右边。这个数字从p减去 确定小数点左边的最大位数 点。
在您的情况下,decimal(3, 1)
表示总共3位数字,小数点右侧有1位数字,
99.9
而decimal(4,1)
提供总共4位数字,小数点右边有1位数,
999.9
答案 1 :(得分:3)
这个问题已经得到解答,但为什么很重要。
数字定义TOTAL位数,然后定义小数点后的数字。
所以DECIMAL(4,1)显示123.4 DECIMAL(4,3)显示1.234
在这两种情况下,您总共有4位数字。在一种情况下,您在小数点后面有1,在小数前面留下3。反之亦然。