本帖最后由 chirea 于 2011-06-02 14:08:27 编辑

解决方案 »

  1.   

    我用datediff函数不能解决,时.分
    还有第二列数据最后两列是空的.以空计算如果用case转的话.又算不出来了.
      

  2.   

    create table #考勤表
    (number varchar(50),
     ClassUP1 datetime ,ClassNext1 datetime,
     ClassUP2 datetime,ClassNext2 datetime)
    insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')
    insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)
    go
    select ltrim(sj/60)+':'+ltrim(sj%60) from( 
    select datediff(mi,ClassUP1,ClassNext1)+datediff(mi,ClassUP2,ClassNext2)sj from #考勤表 
    )t
    go
    drop table #考勤表
    /*-------------------------
    11:0
    NULL(2 行受影响)*/
      

  3.   

    空值的处理:
    create table #考勤表
    (number varchar(50),
     ClassUP1 datetime ,ClassNext1 datetime,
     ClassUP2 datetime,ClassNext2 datetime)
    insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')
    insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)
    go
    select ltrim(sj/60)+':'+ltrim(sj%60) from( 
    select isnull(datediff(mi,ClassUP1,ClassNext1),0)+isnull(datediff(mi,ClassUP2,ClassNext2),0)sj from #考勤表 
    )t
    go
    drop table #考勤表
    /*-------------------------
    11:0
    4:0(2 行受影响)*/
      

  4.   

    速度真快,谢谢
    你转成了字符型,需要这个计算的结果与int型做判断的
    如11.0>=9
    可这样的话.我不能比较了
      

  5.   

    我用 cast( ltrim(sj/60)+'.'+ltrim(sj%60) as decimal(18,2) ) 
    转一下了.但不知有什么影响没?
      

  6.   

    你在这儿不是要的 1:23,即 小时:分吗?
    如果要的是小时的小数值,则:
    create table #考勤表
    (number varchar(50),
     ClassUP1 datetime ,ClassNext1 datetime,
     ClassUP2 datetime,ClassNext2 datetime)
    insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000','2011-05-06 13:16:17.000','2011-05-06 20:16:17.000')
    insert into #考勤表 values('001', '2011-05-06 08:16:17.000','2011-05-06 12:16:17.000',null,null)
    go
    select 1.0*sj/60 from( 
    select isnull(datediff(mi,ClassUP1,ClassNext1),0)+isnull(datediff(mi,ClassUP2,ClassNext2),0)sj from #考勤表 
    )t
    go
    drop table #考勤表
    /*-------------------------
    11.000000
    4.000000(2 行受影响)
    */
      

  7.   

    谢谢.晴天大牛的思路真不错.
    我还直接把字符串转成decimal型.
    select 1.0*sj/60 from这种思路真好.TSQL整型的运算结果永远是整型,晴天叫个1.0真是好到极点了....