怎么在下面的判断语句再写一个条件如果@规定时间等于'00:00:00.000' 再执行,不等于直接返回@规定时间if  convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
begin
select  '迟到'
select  convert(varchar,(@刷卡时间-@规定时间),8)
end
else
begin
select null
end
--这条语句感觉写起来不好看.有什么更好的写法.我的逻辑判断是这样

解决方案 »

  1.   

    select case  convert(varchar,@规定时间,8) when '00:00:00.000' then 
    if  convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
    begin
    select  '迟到'
    select  convert(varchar,(@刷卡时间-@规定时间),8)
    end
    else
    begin
    select null
    end这样的话报错.我的那个判断语法有没有办法优化.
      

  2.   


    if --最外边的条件
    beginif  convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
    begin
    select  '迟到'
    select  convert(varchar,(@刷卡时间-@规定时间),8)
    end
    else
    begin
    select null
    end
    end--try
      

  3.   

    如果我在外面加个if我里面的判断值不能输出declare @刷卡时间 datetime
    declare @规定时间 datetime
    declare @下班时间 datetime
    set @刷卡时间='2011-06-15 02:16:17.000'
    set @规定时间='1900-01-01 00:00:00.000'
    set @下班时间='1900-01-01 08:00:00.000'if  convert(varchar,@规定时间,8) = '00:00:00.000' 
    begin
    if  convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
    begin
    select  '迟到'
    select  convert(varchar,(@刷卡时间-@规定时间),8)
    end
    else
    begin
    select null
    endend
      

  4.   

    我把if全部改成case 也不对.还得麻烦高手们帮忙我改改...
      

  5.   

    --不是很明白,试试吧
    declare @刷卡时间 datetime
    declare @规定时间 datetime
    declare @下班时间 datetime
    set @刷卡时间='2011-06-15 02:16:17.000'
    set @规定时间='1900-01-01 00:00:00.000'
    set @下班时间='1900-01-01 08:00:00.000'select '迟到' ,convert(varchar,(@刷卡时间-@规定时间),8)
    where convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8)
    and  convert(varchar,@规定时间,8) = '00:00:00'
      

  6.   


    谢谢豆子
    我的意思是'@规定时间'这个值是不定的.我就是要判断如果他的值是'00:00:00.000'
    就执行
    这段
    if  convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
    begin
    select  '迟到'
    select  convert(varchar,(@刷卡时间-@规定时间),8)
    end
    else
    begin
    select null
    end如果'@规定时间'不等于'00:00:00.000'就不运行上面的判断.
      

  7.   

    这样写就好看了:
    if  convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
      begin
        select  '迟到'
        select  convert(varchar,(@刷卡时间-@规定时间),8)
      end
    else
      begin
        select null
      end
      

  8.   

    晴天.....我的意思是'@规定时间'这个值是不定的.我就是要判断如果他的值是'00:00:00.000'
    就执行
    这段
    if convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) 
    begin
    select '迟到'
    select convert(varchar,(@刷卡时间-@规定时间),8)
    end
    else
    begin
    select null
    end如果'@规定时间'不等于'00:00:00.000'就不运行上面的判断.
      

  9.   

    那就是这个意思了?
    if convert(varchar(25),@规定时间,14)='00:00:00 000'
      begin
    if  convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
      begin
    select  '迟到'
    select  convert(varchar,(@刷卡时间-@规定时间),8)
      end
    else
      begin
    select null
      end
     end不过,你要注意,除非是人为设定,否则秒级和毫秒级是很难弄到都为0的,要防止不去执行块里的内容.
      

  10.   

    我的程序和你的不一样的.不过我少写了个冒号.改一下:
    declare @刷卡时间 datetime
    declare @规定时间 datetime
    declare @下班时间 datetime
    set @刷卡时间='2011-06-15 02:16:17.000'
    set @规定时间='1900-01-01 00:00:00.000'
    set @下班时间='1900-01-01 08:00:00.000'if convert(varchar(12),@规定时间,14)='00:00:00:000'
      begin
        if  convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
          begin
            select  '迟到'
            select  convert(varchar,(@刷卡时间-@规定时间),8)
          end
        else
          begin
            select null
          end
     end
    /*
    ----
    迟到(1 行受影响)
    ------------------------------
    02:16:17(1 行受影响)*/
      

  11.   

    case when 就是相当于 if else 了
      

  12.   

    噢.明白了.改成case when能行吗?
    用if感觉写得太长了...
      

  13.   

    我要的结果,你13楼的写出来了.但我想用case when我今天下午弄了一个下午了,还是没有用case when弄出来
      

  14.   

    这样行不?
    declare @刷卡时间 datetime
    declare @规定时间 datetime
    declare @下班时间 datetime
    set @刷卡时间='2011-06-15 02:16:17.000'
    set @规定时间='1900-01-01 00:00:00.000'
    set @下班时间='1900-01-01 08:00:00.000'select (case when convert(varchar(12),@规定时间,14)='00:00:00:000' then
      (case when convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) --判断有没有异常.就是怕别人在8个小时间. 上班卡如果超过了下班时间为异常.
           then '迟到,'+convert(varchar,(@刷卡时间-@规定时间),8)
        else null end)
    end)
    /*
    -----------------------------------
    迟到,02:16:17(1 行受影响)
    */
      

  15.   

    你还在呀.我也写出来了.这种版本select case when convert(varchar(12),@规定时间,14)='00:00:00:000' then case when convert(varchar,@刷卡时间,8)>convert(varchar,@规定时间,8) AND convert(varchar,@刷卡时间,8)<convert(varchar,@下班时间,8) then convert(varchar,(@刷卡时间-@规定时间),8) else null end end 
      

  16.   

    --你上面写的是对的,另外等于时也满足条件吧?是的化,可以这么简化
    select case when convert(varchar(12),@规定时间,8)='00:00:00' then 
        case when convert(varchar,@刷卡时间,8) between 
                  convert(varchar,@规定时间,8) AND convert(varchar,@下班时间,8) 
             then convert(varchar,(@刷卡时间-@规定时间),8) 
       
        end 
    end