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