从数据类型 varchar 转换为 numeric 时出错

2025-02-24 10:23:25
推荐回答(4个)
回答1:

一、有null值;

二、有“”值;

ISNUMERIC确定表达式是否是有效的数字类型。以下值在SQL函数ISNUMERIC()中没有找到:

1.有“-”值;

2.财务上用的逗号,有“,”值

把以上转为0,就可以了。

其他:转小数值一般不要超过5位

扩展资料:

注意事项

sql的函数有个isNumeric(参数) 用来转换数字,如果成功反回1,不成功,则反回0。

例: select case when isNumeric(字段)=0 then 0 else 字段运算 end from 表名  

declare @参数 varchar(32)

set @参数='abc'

select  case when isNumeric(@参数)=0 then 0 else @参数 end 

set @参数='123'

select  case when isNumeric(@参数)=0 then 0 else @参数 end

VARCHAR是一种比CHAR更灵活的数据类型,也用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M表示数据类型中允许保存的字符串的最大长度,只要长度小于数据类型中可以保存的最大长度。

因此,对于难以估计确切长度的数据对象,使用VARCHAR数据类型更为明智。VARCHAR数据类型支持的最大长度也是255个字符。

回答2:

一、有null值;

二、有“”值;

ISNUMERIC确定表达式是否为一个有效的数字类型。下面这几个值,用sql函数ISNUMERIC()用查不出来错误:

1、有“-”值;

2、财务上用的逗号,有“,”值

把以上转为0,就可以了。

其他:转小数值一般不要超过5位

扩展资料:

注意事项

sql的函数有个isNumeric(参数) 用来转换数字,如果成功反回1,不成功,则反回0。

例: select case when isNumeric(字段)=0 then 0 else 字段运算 end from 表名  

declare @参数 varchar(32)

set @参数='abc'

select  case when isNumeric(@参数)=0 then 0 else @参数 end 

set @参数='123'

select  case when isNumeric(@参数)=0 then 0 else @参数 end


回答3:

cast(a.num as numeric(18, 5))/cast(b.cknum as numeric(18, 5) 这个得到的是数值类型,而你前面两个得到的是字符类型,我认为只要把这个直接转字符就可以了:
to_char(a.num/b.cknum, $99999.99)

回答4:

一个小建议,转换前用ISNUMERIC()函数试一下,就可以保证不出错了,
CASE WHEN ISNUMERIC(123) = 1 THEN CAST(.. AS INT) ELSE NULL END