从数据类型 varchar 转换为 numeric 时出错 10
select a.*,b.*
,
case when a.num=0 then '库存为0,不能做除法'
when b.cknum IS null then '当天无取出,无法计算天数'
when a.num<>0 and b.cknum<>0 then cast(a.num as numeric(18, 5))/cast(b.cknum as numeric(18, 5))end
as tianshu
from
(SELECT ypwc.[名称] as y_name,ypwc.[编号] as bianhao,ypwc.[药品类型] as ytype,ypwc.[规格] as guige,ypwc.[药品单位] as danwei,kcyp.[仓库编号] as cangku,kcyp.[库存数量] as num FROM [T库存药品] as kcyp right join [T药品卫材] as ypwc on kcyp.[药品编号]=ypwc.[编号] where kcyp.[仓库编号]='7' and ypwc.[药品类型]='中药') as a
left join
(select sum(db_data.[数量]) as cknum,db_data.[编号] as bianhaob from [D调拨单] as db_dan inner join [D调拨数据] as db_data on db_dan.[单据编号]=db_data.[单据编号] where db_dan.[过单日期]>='2014-03-05 00:00:00' and db_dan.[过单日期]<='2014-03-05 23:59:59' group by db_data.[编号]) as b
on
a.bianhao = b.bianhaob
order by tianshu asc 展开
一、有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
to_char(a.num/b.cknum, $99999.99)
我试了,出现了错误:'to_char' 不是可以识别的 内置函数名称。(我是在sql_server里运行的,你写的是什么数据库的内置函数?)还有就是$99999.99
是什么?
哦,抱歉,我写的是oracle中的用法,
sqlserver 这样写应该行:
cast(a.num/b.cknum as varchar(2))
CASE WHEN ISNUMERIC(123) = 1 THEN CAST(.. AS INT) ELSE NULL END