从数据类型 varchar 转换为 numeric 时出错。
update #tempEmployeesAttendance 
set LateClass1 = 
(case when convert(varchar(12),OnDuty1,14)='00:00:00:000' then  (case when convert(varchar,ClassUP1,8)>convert(varchar,OnDuty1,8) AND convert(varchar,ClassUP1,8)<convert(varchar,OffDuty1,8) then convert(varchar,(ClassUP1-OnDuty1),8)    else null end)
else (case when convert(varchar,ClassUP1,8) > convert(varchar,OnDuty1,8) then  convert(varchar,(ClassUP1-OnDuty1),8) else null end)end )
这句为什么会提示转换为 numeric 时出错。
LateClass1字段试过datetime,nvarchar(50),decmail(4,2)都试过还是报这个错

解决方案 »

  1.   

    不知道你的表结构,但是判断可能是在进行类似
    ClassUP1-OnDuty1
    这样的运算时,数据类型不对.
      

  2.   

    用ISNUMERIC判断一下,是否有数据不符合
      

  3.   

    这样写就可以执行不报错.这是为什么,有什么后果没update #tempEmployeesAttendance 
    set LateClass1 = 
    ISNUMERIC( (case when convert(varchar(12),OnDuty1,14)='00:00:00:000' then  (case when convert(varchar,ClassUP1,8)>convert(varchar,OnDuty1,8) AND convert(varchar,ClassUP1,8)<convert(varchar,OffDuty1,8) then convert(varchar,(ClassUP1-OnDuty1),8)    else null end)
    else (case when convert(varchar,ClassUP1,8) > convert(varchar,OnDuty1,8) then  convert(varchar,(ClassUP1-OnDuty1),8) else null end)end ))
      

  4.   

    过滤掉不符合的数据,然后用cast转换。
      

  5.   

    --执行一下的查询,看下查询后是什么信息,再根据此信息与LateClass1字段去匹配
    select (case when convert(varchar(12),OnDuty1,14)='00:00:00:000' 
    then  (case when convert(varchar,ClassUP1,8)>convert(varchar,OnDuty1,8) 
    AND convert(varchar,ClassUP1,8)<convert(varchar,OffDuty1,8) 
    then convert(varchar,(ClassUP1-OnDuty1),8)    else null end)
    else (case when convert(varchar,ClassUP1,8) > convert(varchar,OnDuty1,8) 
    then  convert(varchar,(ClassUP1-OnDuty1),8) else null end)end )
    from  #tempEmployeesAttendance
      

  6.   

    [SQL code]------------------------------
    NULL
    00:50:11
    NULL
    00:30:00
    NULL
    00:30:00
    NULL
    07:30:00(8 row(s) affected)
    [SQL]
    我把他改为datetime为啥也是不对呢?
      

  7.   

    我这是计算的时间.最好是datetime类型.可我这样怎么也无法保存进去
      

  8.   

    --用你的数据测试一下,应该可以的
    declare @a datetime,@b datetime
    set @a='00:30:00';set @b=null
    select @a,@b
                                  
    ------------------------------ -------------
    1900-01-01 00:30:00.000            NULL(所影响的行数为 1 行)