簡體   English   中英

如何計算兩個日期之間的天數

[英]How to calculate days between two dates,

在MySQL中是否可以輕松地獲取兩個日期之間的天數,按月分組,然后分散月份之間的天數,以便當我按月分組時,我可以看到兩個日期之間的多少天下降了進入每個月。

示例:創建05.05.2014至到期06.06.2014返回32天。 我想顯示為:

5月:26天6月:5天

到目前為止,我已經:

SELECT MONTHNAME(date) as month_name,
SUM(DATEDIFF(expiration, date)) AS num_days
FROM reservations
GROUP BY month_name

但是,它並不能按月正確地分散日期,而只是將它們全部按-start-date-month分組。 任何想法都會得到高度重視。

我將首先構建一個全面的日期臨時表(或CTE)。

在這里,您可以選擇所需的內容,並根據需要將其分組。

    IF OBJECT_ID('TEMPDB..#Dates') IS NOT NULL DROP TABLE #Dates

    DECLARE @StartDate DATETIME, @EndDate DATETIME

        SET @StartDate = '05/05/2014'
        SET @EndDate = '06/06/2014'

    ;WITH Dates AS
        (
         SELECT CAST(CONVERT(VARCHAR(8), @StartDate,112) AS INT) AS DateId
              , CAST(@StartDate AS DATE) AS Date
              , CAST(@StartDate AS DATETIME) AS DateTime
              , DATEPART(QUARTER, @StartDate) AS QuarterId
              , 'Q' + CAST(DATEPART(QUARTER,@StartDate) AS CHAR(1)) AS Quarter
              , DATEPART(MONTH, @StartDate) AS MonthId
              , DATENAME(MONTH, @StartDate) AS Month
              , DATEPART(DAY, @StartDate) AS Day
              , DATEPART(YEAR, @StartDate) AS Year
              , DATENAME(DW,@StartDate) AS DayOfWeek
              , DATEPART(DAYOFYEAR, @StartDate) AS DayOfYear

          UNION ALL

         SELECT CAST(CONVERT(VARCHAR(8),DATEADD(DAY, 1, D.DateTime), 112) AS INT) ASDateId
              , CAST(DATEADD(DAY, 1, D.DateTime) AS DATE) AS Date
              , CAST(DATEADD(DAY, 1, D.DateTime) AS DATETIME) AS DateTime
              , DATEPART(QUARTER,DATEADD(DAY,1,D.DateTime)) AS QuarterId
              ,'Q'+CAST(DATEPART(QUARTER,DATEADD(DAY, 1, D.DateTime)) AS CHAR(1)) AS Quarter
              , DATEPART(MONTH,DATEADD(DAY, 1, D.DateTime)) AS MonthId
              , DATENAME(MONTH,DATEADD(DAY, 1,D.DateTime)) AS Month
              , DATEPART(DAY,DATEADD(DAY, 1, D.DateTime)) AS Day
              , DATEPART(YEAR,DATEADD(DAY, 1, D.DateTime)) AS Year
              , DATENAME(DW,DATEADD(DAY,1, D.DateTime)) AS DayOfWeek
              , DATEPART(DAYOFYEAR,DATEADD(DAY,1, D.DateTime)) AS DayOfYear
           FROM Dates AS D
          WHERE D.DateTime < @EndDate
        )

    SELECT DateId AS DateId
         , Date AS Date
         , DateTime AS DateTime
         , QuarterId AS QuarterId
         , Quarter AS Quarter
         , MonthId AS MonthId
         , Month AS Month
         , Day AS Day
         , Year AS Year
         , DayOfWeek AS DayOfWeek
         , DayOfYear AS DayOfYear
         , ROW_NUMBER() OVER(ORDER BY DateId)-1 AS DayCount
      INTO #Dates
      FROM Dates AS D
     ORDER BY D.DateId
    OPTION (MAXRECURSION 32767)

    -- SELECT * FROM #Dates

SELECT COUNT(Day) AS CountOfDays, Month
  FROM #Dates
  GROUP BY Month

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM