select (cast(1 as numeric(18,2))-cast('0.3' as numeric(18,2)))*100  这种方式 numeric 计算没问题

把语句放到update中就没有结果出来,,,why ?


统一为numeric类型的数值计算竟然 变成null     是写update里面的原因ma? update 赋值可以进行这样的计算啊


哦 我知道了  因为表中一个字段的值为null  

例如: 当 o_Share2 值 为null 下面的语句 执行成功,没有报错,并且显示 多少行受影响, 但是 RMB这一列的值是 null   

update [ordertest]
     set  RMB=o_Amount_RMB*(1.0-cast(o_Share1 as  numeric(18,2))-cast(o_Share2 as  numeric(18,2)))



再比如例子:


declare @it nvarchar(10)
set @it=null
select 100*(cast(@it as numeric(18,2)))

declare @it nvarchar(10)
set @it=null
select 100*(1.00-cast(@it as numeric(18,2)))


 

 


declare @payday int
set @payday=1;
select dateadd(day,@payday,'2012-1-1')

 

declare @payday int
set @payday=null;
select dateadd(day,@payday,'2012-1-1')

 

declare @payday int
set @payday=null;
select dateadd(day,cast(@payday as int),'2012-1-1')

 


结论: 不能将  null型的值 转换为 float 或  numeric 型 来计算。

          。用来计算的值一定保证不能是null 型  。 





本文转载:CSDN博客