先转化为DateTime类型再直接减就行了

解决方案 »

  1.   

    SELECT month(youdate),count(*)
    FROM [请假纪录]
    WHERE yourdate >= startdate AND yourdate <= enddate
    GROUP BY month(yourdate)
      

  2.   

    jiezhi(風依舊) 的理解能力蛮厉害,呵呵~~~
      

  3.   

    佩服 。jiezhi(風依舊)  中搂主,注意你的表达能力
      

  4.   

    jiezhi(風依舊)
    屁话加废话
      

  5.   

    对于任意的请假开始时间和结束时间,要计算其中涉及的每个月的请假天数,可以先得到其间隔的月份数:
    month(结束日期)- month(开始日期)+1  //涉及的月份数
    int iStart = 开始的月份
    int iEnd = 结束的月份
    for(int i=iStart;i<iEnd;i++)
    {
        if(i==iStart)
        {
            //获取开始日期的最后一天-开始日期 = 该月的请假天数。
        }
        else if (i==iEnd)
        {
           //获取开始日期的最后一天-结束日期 = 该月的请假天数。
        }
        else
        {
           根据其月份得到该月的天数
        }
    }
      

  6.   

    month(结束日期)- month(开始日期)+1  //先得到涉及的月份数
    int iStart = 开始的月份
    int iEnd = 结束的月份
    for(int i=iStart;i<iEnd;i++)
    {
        if(i==iStart)
        {
            //获取开始日期的最后一天-开始日期 = 该月的请假天数。
        }
        else if (i==iEnd)
        {
           //获取结束日期的最后一天-结束日期 = 该月的请假天数。
        }
        else
        {
           根据其月份得到该月的天数
        }
    }
      

  7.   

    month是sql server里面的函数,我建议你使用存储过程来处理
      

  8.   

    TO:jiezhi(風依舊)
       如果只取6月份的请假天,数怎样从数据库中计算出来!谢谢!
      

  9.   

    這個就是我寫的存儲過程,通過驗証:(隻要偉開始日期同結束日期就可以了)
    CREATE PROCEDURE dbo.my_MonthDays
        @sDate datetime,
        @eDate datetime
    as
    create table #report1(indate datetime)
    set nocount on
    declare @mNum int
    declare @n int
         select @mNum =datediff(day,@sdate,@edate)
    select @n=0
       while not @n>@mNum
    begin
    insert into #report1 values(dateadd(day,@n,@sdate))
    select @n=@n+1
    end
    exec ('select convert(varchar(7),indate,120),count(indate) from #report1 group by convert(varchar(7),indate,120)')
    GO
      

  10.   

    DateTime.DaysInMonth
    返回指定年份中指定月份的天数。
      

  11.   

    jiezhi(風依舊)
    I'm sorry!
      

  12.   

    上面所寫是針對於SQL server數據庫的存儲過程。
      

  13.   

    all the my wrong 
    sorry ,jiezhi
      

  14.   

    to Relta(芯片)
    存儲過程有什么好处呢?
    我只喜欢用view
      

  15.   

    我用 javascript 寫了一個函數用於計算請假工時:
    給你參考一下
    stDate,enDate 的格式為“2004-06-02”;stTime,enTime的格式為“08:00”
    function SumLeaveHour(stDate,enDate,stTime,enTime)//計算請假工時
    {
       var st,en,hours = 0;
       var tmp = stDate.split("-");
       var tmp2 = stTime.replace(":",",");
       //注意月份,需設置為 0 - 11 的整數
       eval("st =new Date("+tmp[0]+","+(tmp[1]-1)+","+tmp[2]+","+tmp2+");"); 
       tmp = enDate.split("-");
       tmp2 = enTime.replace(":",",");
       eval("en =new Date("+tmp[0]+","+(tmp[1]-1)+","+tmp[2]+","+tmp2+");");
       tmp = 1000*60*60*24; //一天的毫秒數
       var days = Math.round((en.getTime() - st.getTime())/tmp);
       tmp=1000*60*60;//一個小時的毫秒數
       if(days>0) //不在同一天
       {
          var st2 = new Date(st.getFullYear(),st.getMonth(),st.getDate(),17,30);
          var en2 = new Date(en.getFullYear(),en.getMonth(),en.getDate(),08,00);
          if(st.getDay()!=0 && st.getDay()!=6) //避開雙休日
          {
    hours = (st2.getTime() - st.getTime())/tmp; //第一天的請假工時
    if(st.getHours()<13)
    {
     hours -= 1.5;
    }
          }
          if(en.getDay()!=0 && en.getDay()!=6)
          {
    hours += (en.getTime() - en2.getTime())/tmp ;//最後一天的請假工時
    if(en.getHours()>13)
    {
     hours -= 1.5;
    }
          }
          tmp2 = 0;
          for(var i =1;i<days;i++)
          {
     st2.setTime(st.getTime()+tmp*24*i);  
     if(st2.getDay()!=0 && st2.getDay()!=6)
     {
        tmp2 ++; //從第一天到最後一天之間有多少個工作日
     }
          }
          hours += tmp2*8;
       }
       else if(days == 0) //在同一天
       {
          hours = (en.getTime()/tmp)-(st.getTime()/tmp);
          if(st.getHours()<13 && en.getHours()>13)
          {
             hours -= 1.5; //除掉中午休息時間
          }
       }
       if(hours<0){hours=0;}
       return hours;
    }
      

  16.   

    to  codeangel(程序人生.NET):
    :)