一、有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个字符。
一、有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
cast(a.num as numeric(18, 5))/cast(b.cknum as numeric(18, 5) 这个得到的是数值类型,而你前面两个得到的是字符类型,我认为只要把这个直接转字符就可以了:
to_char(a.num/b.cknum, $99999.99)
一个小建议,转换前用ISNUMERIC()函数试一下,就可以保证不出错了,
CASE WHEN ISNUMERIC(123) = 1 THEN CAST(.. AS INT) ELSE NULL END