2016-07-26 186 views
-1
SELECT 
    floor(
     datediff('2016-08-01','2016-07-01')/7) * 2 + (
     CASE WHEN 
     IF (weekday('2016-08-01') >= 5, 4,weekday('2016-08-01')) >= 
    IF (weekday('2016-07-02') >= 5, 4,weekday('2016-07-01')) 
    THEN 

      IF (weekday('2016-08-01') >= 5, 4,weekday('2016-08-01')) - 
      IF (weekday('2016-07-01') >= 5, 4,weekday('2016-07-01')) 
     ELSE 
      5 + 
      IF (weekday('2016-08-01') >= 5, 4,weekday('2016-08-01')) -  
      IF (weekday('2016-07-01') >= 5, 4, weekday('2016-07-01')) 
     END 
    ) weekdays; 

當我執行此代碼時,它總是返回9我不知道我在哪裏做錯誤,請建議我在哪裏做錯了。而給定日期之間的週六和週日之間應該是10,請給我建議如何計算mysql中兩個日期之間的星期六和星期日的總數

+0

請基於一些樣品輸入添加您預期的輸出。不要只粘貼正在運行的查詢。 – 1000111

+0

我希望我們在放置2016-08-01和2016-07-01這兩個日期時,它應該在給定日期之間返回所有星期六的星期日 –

+0

您是否有任何表格有所有日期? – 1000111

回答

1

如果你沒有讓所有的開始日期和結束日期(含)之間的日期表又那麼你就需要採取查詢,這將創造所有日期範圍(含)之間的所有日期。然後使用MySQLWEEKDAY功能檢查日是否爲SaturdaySunday

SELECT 
dateTable.Day, 
DAYNAME(dateTable.Day) AS dayName 
FROM 
( SELECT ADDDATE('2016-07-01', INTERVAL @i:[email protected]+1 DAY) AS DAY 
    FROM (
     SELECT a.a 
     FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a 
     CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b 
     CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c 
    ) a 
    JOIN (SELECT @i := -1) r1 
    WHERE 
    @i < DATEDIFF('2016-08-01', '2016-07-01') 

) AS dateTable 
WHERE WEEKDAY(dateTable.Day) IN (5,6) 
ORDER BY dateTable.Day; 

WORKING DEMO

注: WEEKDAY返回日期(平日指數0 =週一,1 =星期二,... 6 =星期日)。

編輯:

如果您只需要count

SELECT 
COUNT(*) AS total 
FROM 
( SELECT ADDDATE('2016-07-01', INTERVAL @i:[email protected]+1 DAY) AS DAY 
    FROM (
     SELECT a.a 
     FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a 
     CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b 
     CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c 
    ) a 
    JOIN (SELECT @i := -1) r1 
    WHERE 
    @i < DATEDIFF('2016-08-01', '2016-07-01') 

) AS dateTable 
WHERE WEEKDAY(dateTable.Day) IN (5,6) 

Demo

+0

我必須只顯示計數不是天 –

+0

請在編輯部分下查看 – 1000111

相關問題