我有两个类型为varchar
的字段,其中包含数值或空字符串,后者我已过滤掉以避免Divide by Zero
错误。
我试图确定num2与num1相关的百分比值,即(Num_2 * 1 / Num_1)。相对简单的数学。
我遇到的问题是我似乎无法进行数学计算,然后将其转换为十进制值。我一直收到Arithmetic overflow error converting int to data type numeric
错误。
有人可以帮我解决投射问题吗?
答案 0 :(得分:1)
您没有正确解释错误。
这不是关于将数学结果转换为浮点数,而是关于隐式类型转换之前计算等式。
您的表中有一些无法转换为数字的值,因为它们不是有效的数字或超出范围的数字。一行包含无效数据就足以使整个查询失败。
答案 1 :(得分:0)
也许你正在寻找类似的东西?
declare @table table (
[numerator] [sysname]
, [denominator] [sysname]);
insert into @table
([numerator],[denominator])
values (N'1',N'2'),
(N'9999999999',N'88888888888');
select case
when isnumeric([numerator]) = 1
and isnumeric ([denominator]) = 1
then
cast([numerator] as [float]) / [denominator]
else
null
end
from @table;
答案 2 :(得分:0)
这是你要找的吗?
select cast('25.5' as decimal(15, 8)) / cast('100.0' as decimal(15, 8))
上面的例子将返回:
0.25500000000000000000000
在这种情况下,我正在转换操作数类型,然后才能在分区中使用。
请记住用字段名称替换查询中的文字。
答案 3 :(得分:0)
SELECT
(CASE WHEN NUM_2 = '' THEN 0 ELSE CAST(NUM_2 AS NUMERIC(15,4)) END)
/
(CASE WHEN NUM_1 = '' THEN 1 ELSE CAST(NUM_1 AS NUMERIC(15,4)) END)
你测试字符串是否为空。如果是,则使用0(或1,以避免除零)