sql >> データベース >  >> RDS >> Mysql

mysqlの2つの日付の間の土曜日と日曜日の総数を計算する方法

    開始日から終了日までのすべての日付(両端を含む)を含むテーブルがない場合は、最初に指定された日付範囲(両端を含む)の間のすべての日付を作成するクエリを採用する必要があります。次に、WEEKDAYを使用します MySQLの機能 その日がSaturdayであるかどうかを確認します またはSunday

    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)
    

    デモ




    1. PHPでMySQL接続を何度も開くことの意味は何ですか

    2. 2つのJson応答Jsonオブジェクトと配列をフェッチする方法

    3. MySQLでJOINを使用する際のあいまいな列エラーの回避

    4. mysql結果セットをループする方法