2017-03-08 7 views
1

2つの日付の間に月曜日をselectステートメントで取得したいが、SQL Serverのみを検索している。2つの日付の間に月曜日を取得するmysql

私はこれを試してみましたが、それは動作しません:

SELECT DATE_ADD('2017-01-01', INTERVAL ROW DAY) AS Date 
FROM (
      SELECT @row := @row + 1 AS row 
      FROM (
         SELECT 0 UNION ALL 
         SELECT 1 UNION ALL 
         SELECT 3 UNION ALL 
         SELECT 4 UNION ALL 
         SELECT 5 UNION ALL 
         SELECT 6 
      ) t1, 
      (
       SELECT 0 UNION ALL 
       SELECT 1 UNION ALL 
       SELECT 3 UNION ALL 
       SELECT 4 UNION ALL 
       SELECT 5 UNION ALL 
       SELECT 6 
      ) t2, 
      (
       SELECT @row:=-1 
      ) t3 LIMIT 31 
     ) b 
WHERE DATE_ADD('2017-01-01', INTERVAL ROW DAY) BETWEEN '2017-01-01' AND '2017-12-31' 
AND DAYOFWEEK(DATE_ADD('2017-01-01', INTERVAL ROW DAY)) = 2 

このクエリは、私だけ1ヶ月Monday's日付を提供します。

私はあなたが私に

よろしくを助けることができることを願っています!

答えて

2

このSQLだけを実際に解決したい場合は、少し深く掘り下げて一連の日を生成する必要があります。これはこれを解決するための最も難しい側面です。これ以外にも、あなたがすでに推測しているように、希望の日数を得るにはDAYOFWEEKまたはWEEKDAYを使うことができます。

SELECT * 
    FROM (
     SELECT DATE_ADD('2013-01-01', 
      INTERVAL n4.num*1000+n3.num*100+n2.num*10+n1.num DAY) AS DATE 
      FROM (
       SELECT 0 AS num 
       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 n1, 
     (
       SELECT 0 AS num 
       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 n2, 
     (
       SELECT 0 AS num 
       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 n3, 
     (
       SELECT 0 AS num 
       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 n4 
    ) AS a 
WHERE DATE >= '2017-01-01' AND DATE < NOW() 
    AND WEEKDAY(DATE) = 0 
ORDER BY DATE 

その他のRDBMSには、そのためのinbuild機能があります。

もしすべての日付が既に存在するカレンダーテーブルを持っていれば、もっと簡単になります。

+0

あなたの答えをありがとう、それは動作します! –

関連する問題