一尘不染

将数值转换为数值类型的算术溢出错误

sql

我的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]

我在语法行上方遇到错误。


阅读 106

收藏
2021-05-30

共1个答案

一尘不染

这是您的问题:

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(精度)是小数点左边和右边都将存储的最大十进制数字总数。精度必须是1到最大精度38之间的值。默认精度是18。

s(小数位数)是将存储在小数点右边的小数位数。从p减去此数字,以确定小数点左边的最大位数。

在您的情况下,decimal(3, 1)表示总共3位数字,小数点右边是1位数字,

99.9

decimal(4,1)总共提供了4位数字,小数点右边是1位数字,

999.9
2021-05-30