数据结构如下:员工       假期ID          开始日期       期间        结束日期       期间2       
s22    L201303_001     2013-01-08      全天  2013-01-08  全天 
s18    L201303_003     2013-01-10  上午 2013-01-10  上午
s18    L201303_004     2013-01-21  上午 2013-01-23  上午
s18    L201303_005     2013-01-23  全天  2013-01-23  全天 
........
........
如果某天员工输入日期范围例如 员工s18再次请假,输入2013-01-22 下午 到 2013-01-24 上午 后 判断他输入的日期是否已经请过假了。如果有的话提示。

解决方案 »

  1.   

    设计的问题,为什么不把请假时间弄成具体的开始时间和结束时间呢
    上午就是 xxxx 08:00 -- xxx 12:00
    这样多好比较了,你这半天。全天的怎么比啊
      

  2.   

    select * 
    from qjb a
    where start<=@start and [end]>=@end and
          case when qj1='全天' then 3
               when qj1='下午' then 2
               else 1 end<=
          case when @qj1='全天' then 3
               when @qj1='下午' then 2
               else 1 end and
          case when qj2='全天' then 3
               when qj2='下午' then 2
               else 1 end>=
          case when @qj2='全天' then 3
               when @qj2='下午' then 2
               else 1 end  
      

  3.   


    附议!
    原表增加计算字段,起始时间和终止时间
    [起始时间] as DATEADD(hour,case [期间] when '上午' then 8 when '下午' then 13 when '全天' then 8 end,[开始日期])
    [终止时间] as DATEADD(hour,case [期间2] when '上午' then 12 when '下午' then 17 when '全天' then 17 end,[结束日期])然后的判断就很简单了