有一张表,名叫vacation,存储的是休假信息。表中字段主要有:userid, startdate, enddate。我现在想查出某个时间段内员工请假信息。例如
vacation:
userid startdate    enddate
1      7/1/2005     7/5/2005
2      6/5/2005     7/3/2005我想查出来7/2 - 7/4几天内休假的信息,产生结果为:
userid   持续时间
1        3
2        2请问这个怎么写呢?谢谢答复

解决方案 »

  1.   

    select userid,datediff(dd, startdate    ,enddate)
      

  2.   

    select userid ,datediff(date,case(when convert(char(10),startdate,120)>'2005/07/02'then convert(char(10),startdate,120)else '2005/07/02',case(when convert(char(10),enddate,120)<'2005/07/05'then convert(char(10),enddate,120)else '2005/07/05' )) as 持续时间
     from vacation
      

  3.   

    startdate enddate都是datetime类型的,是不是不用转换啊?
    如果不用,怎么写好呢?谢谢
      

  4.   

    varchar或datetime均可直接用datediff来操作.
      

  5.   

    select userid,datediff(dd, startdate,enddate) as '持续时间'
    from vacation
      

  6.   


    declare @b table (userid int,startdate datetime, enddate datetime)
    insert into @b
    select 1,'7/1/2005','7/5/2005' union all 
    select 2,'6/5/2005','7/3/2005'select userid ,datediff(dd,(case when startdate>'7/2/2005' then startdate else '7/2/2005' end ) ,(case when enddate>'7/4/2005'then enddate else '7/4/2005'end )) as 持续时间
    from @b
      

  7.   


    declare @b table (userid int,startdate datetime, enddate datetime)
    insert into @b
    select 1,'7/1/2005','7/5/2005' union all 
    select 2,'6/5/2005','7/3/2005'select userid ,datediff(dd,(case when startdate>'7/2/2005' then startdate else '7/2/2005' end ) ,(case when enddate>'7/4/2005'then enddate else '7/4/2005'end )) as 持续时间
    from @b------------------
    1 3
    2 2
    ---------------