goo*_*yui 3 sql t-sql sql-server
我在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]
Run Code Online (Sandbox Code Playgroud)
我正在上面的语法行面临错误.
这是你的问题:
declare @compliance decimal(10,5)
set @compliance = 100.0 -- <----------------
select CAST(FLOOR(@compliance *10)/10.0 AS DECIMAL(3,1))
Run Code Online (Sandbox Code Playgroud)
抛出"将数字转换为数据类型数字的算术溢出错误"错误.改变DECIMAL(4,1)
工作,或@paola建议,改变你的条件>= 100.0
decimal(p,s):
Run Code Online (Sandbox Code Playgroud)
p(精度)是将存储的最小小数位总数,包括小数点的左侧和右侧.精度必须是从1到最大精度为38的值.默认精度为18.
s(scale)是将存储在小数点右侧的小数位数.从p中减去此数字以确定小数点左侧的最大位数.
在您的情况下,decimal(3, 1)
意味着总共3位数,小数点右边有1位数,
99.9
Run Code Online (Sandbox Code Playgroud)
而decimal(4,1)
在小数点右边提供总共4位数字,1位数,
999.9
Run Code Online (Sandbox Code Playgroud)
这个问题已经得到了回答,但为什么很重要。
数字定义总位数,然后是小数点后的数字。
所以 DECIMAL(4,1) 显示 123.4 DECIMAL(4,3) 显示 1.234
在这两种情况下,您总共有 4 位数字。在一种情况下,小数点后有 1,小数点前有 3。反之亦然。
归档时间: |
|
查看次数: |
15475 次 |
最近记录: |