MariaDBでは、WEEK()
は、指定された日付式から週を返す組み込みの日付と時刻の関数です。
2つの引数を受け入れます。週を抽出する日付、および結果で使用するモードを指定するオプションのmode引数。
週を0
の範囲の数値として返します 53
へ または1
53
へ 、使用しているモードによって異なります。
構文
構文は次のようになります:
WEEK(date[,mode])
date
は週を取得する日付式であり、mode
使用するモードを指定できるオプションの引数です。
モード
オプションのmode
引数は、週が日曜日と月曜日のどちらで始まるか、および戻り値が0
の範囲にあるかどうかを決定します。 53
へ または1
から 53
へ 。
mode引数は、次のいずれかになります。
モード | 第1日 | 範囲 | 第1週は第1週です… |
---|---|---|---|
0 | 日曜日 | 0-53 | 今年の日曜日 |
1 | 月曜日 | 0-53 | 今年は3日以上 |
2 | 日曜日 | 1-53 | 今年の日曜日 |
3 | 月曜日 | 1-53 | 今年は3日以上 (ISO 8601:1988に準拠) |
4 | 日曜日 | 0-53 | 今年は3日以上 |
5 | 月曜日 | 0-53 | 今年の月曜日 |
6 | 日曜日 | 1-53 | 今年は3日以上 |
7 | 月曜日 | 1-53 | 今年の月曜日 |
mode引数を省略した場合、default_week_format
の値 システム変数が使用されます。
default_week_format
の値を確認しましょう システム変数:
SELECT @@default_week_format;
結果:
+-----------------------+ | @@default_week_format | +-----------------------+ | 0 | +-----------------------+
ここで、WEEK()
を実行すると モードを指定せずに、モード0
を使用します 。
例
WEEK()
を呼び出す例を次に示します。 モードを指定せずに:
SELECT WEEK('2030-01-01');
結果:
+--------------------+ | WEEK('2030-01-01') | +--------------------+ | 0 | +--------------------+
モードを指定する
モードを指定する例は次のとおりです。
SELECT WEEK('2030-01-01', 1);
結果:
+-----------------------+ | WEEK('2030-01-01', 1) | +-----------------------+ | 1 | +-----------------------+
今回の結果は1
です。 0
の代わりに 。
同じ日付のすべてのモードを実行してみましょう:
SELECT
WEEK('2030-01-01', 0),
WEEK('2030-01-01', 1),
WEEK('2030-01-01', 2),
WEEK('2030-01-01', 3),
WEEK('2030-01-01', 4),
WEEK('2030-01-01', 5),
WEEK('2030-01-01', 6),
WEEK('2030-01-01', 7);
結果(垂直出力を使用):
WEEK('2030-01-01', 0): 0 WEEK('2030-01-01', 1): 1 WEEK('2030-01-01', 2): 52 WEEK('2030-01-01', 3): 1 WEEK('2030-01-01', 4): 1 WEEK('2030-01-01', 5): 0 WEEK('2030-01-01', 6): 1 WEEK('2030-01-01', 7): 53
日時の値
WEEK()
関数は日時値でも機能します:
SELECT WEEK('2030-08-01 10:30:45');
結果:
+-----------------------------+ | WEEK('2030-08-01 10:30:45') | +-----------------------------+ | 30 | +-----------------------------+
数値日付
日付として意味がある限り、日付を数値として渡すこともできます。
例
SELECT WEEK(20301125);
結果:
+----------------+ | WEEK(20301125) | +----------------+ | 47 | +----------------+
または、次の場合でも(2桁の年を使用):
SELECT WEEK(301125);
結果:
+--------------+ | WEEK(301125) | +--------------+ | 47 | +--------------+
しかし、それは日付として意味をなさなければなりません。日の部分を無効な日に増やすと、次のようになります。
SELECT WEEK(20301135);
結果:
+----------------+ | WEEK(20301135) | +----------------+ | NULL | +----------------+ 1 row in set, 1 warning (0.001 sec)
null
を返しました 警告付き。
警告を見てみましょう:
SHOW WARNINGS;
結果:
+---------+------+--------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------+ | Warning | 1292 | Incorrect datetime value: '20301135' | +---------+------+--------------------------------------+
その他の区切り文字
日付には他の区切り文字を使用できます。 MariaDBは、日付の区切り文字に関しては非常に寛容です。いくつかの有効な例を次に示します。
SELECT
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25');
結果(垂直出力を使用):
WEEK('2030/06/25'): 25 WEEK('2030,06,25'): 25 WEEK('2030:06:25'): 25 WEEK('2030;06!25'): 25
現在の日付
NOW()
を渡すことができます 現在の日付を使用する日時引数として:
SELECT
NOW(),
WEEK(NOW());
結果:
+---------------------+-------------+ | NOW() | WEEK(NOW()) | +---------------------+-------------+ | 2021-05-17 08:36:12 | 20 | +---------------------+-------------+
無効な引数
無効な引数が渡されると、WEEK()
null
を返します :
SELECT WEEK('2030-65-78');
結果:
+--------------------+ | WEEK('2030-65-78') | +--------------------+ | NULL | +--------------------+ 1 row in set, 1 warning (0.000 sec)
警告を表示しましょう:
SHOW WARNINGS;
結果:
+---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1292 | Incorrect datetime value: '2030-65-78' | +---------+------+----------------------------------------+
引数がありません
WEEK()
の呼び出し 引数の数が間違っているか、引数を渡さないと、エラーが発生します:
SELECT WEEK();
結果:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1
そして別の例:
SELECT WEEK('2030-12-10', 1, 2);
結果:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' 2)' at line 1