MySQLでは、WEEK()
を使用できます 指定された日付の週番号を取得する関数。 「週番号」とは、その年の週を意味します。
この関数を使用するには、引数として日付を指定するだけで、週番号が返されます。
また、週を日曜日と月曜日のどちらで開始するか、および週を0から53または1から53の範囲にするかどうかを指定するオプションもあります。
構文
構文は次のようになります:
WEEK(date[,mode])
場所:
date
週番号を返す日付です。mode
は、週を日曜日と月曜日のどちらで開始するか、および週を0から53または1から53の範囲にするかを指定する数値です。可能なモード値については、以下の表を参照してください。
例1-基本的な使用法
実例を示します。
SELECT WEEK('2021-01-25') As 'Week Number';
結果:
+-------------+ | Week Number | +-------------+ | 4 | +-------------+
これは、年末に近い日付の例です。
SELECT WEEK('2021-12-25') As 'Week Number';
結果:
+-------------+ | Week Number | +-------------+ | 51 | +-------------+
例2–モードを指定する
2番目の引数を指定しない場合、WEEK()
関数は、default_week_format
で指定されたモードを使用します システム変数。この変数のデフォルト値は0
です。 。
ただし、使用するモードを指定するための2番目の引数を指定するオプションもあります。例:
SELECT WEEK('2019-10-17', 7) AS 'Mode 7';
結果:
+--------+ | Mode 7 | +--------+ | 41 | +--------+
可能なモード値は次のとおりです。
モード | 最初の曜日 | 範囲 | 第1週は最初の週です… |
---|---|---|---|
0 | 日曜日 | 0-53 | 今年の日曜日 |
1 | 月曜日 | 0-53 | 今年は4日以上 |
2 | 日曜日 | 1-53 | 今年の日曜日 |
3 | 月曜日 | 1-53 | 今年は4日以上 |
4 | 日曜日 | 0-53 | 今年は4日以上 |
5 | 月曜日 | 0-53 | 今年の月曜日 |
6 | 日曜日 | 1-53 | 今年は4日以上 |
7 | 月曜日 | 1-53 | 今年の月曜日 |
週1が「今年4日以上」の最初の週であるモード値の場合、週はISO 8601:1988に従って番号が付けられます:
- 1月1日を含む週の新年が4日以上の場合、それは第1週です。
- それ以外の場合は、前年の最後の週であり、次の週は第1週です。
例3–モードの比較
使用しているモードに応じてさまざまな結果を得る方法を簡単に比較します。
次の3つの例では、同じコードを使用していますが、日付が3つ異なります。これらの日付は連続しています– 1月5日、6日、7日に発生します。ご覧のとおり、正確な日付と使用されているモードによって、結果は大きく異なる可能性があります。
日付1
SET @date = '2019-01-05'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
結果:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 0 | 1 | 52 | 1 | 1 | 0 | 1 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
日付2
SET @date = '2019-01-06'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
結果:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 1 | 1 | 1 | 2 | 0 | 2 | 53 | +--------+--------+--------+--------+--------+--------+--------+--------+
日付3
SET @date = '2019-01-07'; SELECT WEEK(@date, 0) AS 'Mode 0', WEEK(@date, 1) AS 'Mode 1', WEEK(@date, 2) AS 'Mode 2', WEEK(@date, 3) AS 'Mode 3', WEEK(@date, 4) AS 'Mode 4', WEEK(@date, 5) AS 'Mode 5', WEEK(@date, 6) AS 'Mode 6', WEEK(@date, 7) AS 'Mode 7';
結果:
+--------+--------+--------+--------+--------+--------+--------+--------+ | Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 | +--------+--------+--------+--------+--------+--------+--------+--------+ | 1 | 2 | 1 | 2 | 2 | 1 | 2 | 1 | +--------+--------+--------+--------+--------+--------+--------+--------+