指定された日付の年内の週番号を返します。週の開始曜日を制御するには、date_part パラメーターを使用します。
構文
BIGINT|INT WEEKOFYEAR (STRING|DATETIME|DATE|TIMESTAMP|TIMESTAMP_NTZ <date> [, STRING <date_part>])パラメーター
date (必須)
サポートされている型: STRING、DATETIME、DATE、TIMESTAMP、またはTIMESTAMP_NTZ。
STRING フォーマット:
yyyy-mm-dd hh:mi:ssHive互換データ型エディションでは、STRING フォーマットは
yyyy-mm-ddであり、date_partはサポートされていません。
date_part (オプション)
週の最初の曜日を設定する STRING 値。有効な値:
| 値 | 動作 |
|---|---|
week | 週は月曜日から始まります。week(monday) と同等です。 |
week(weekday) | 週は指定された曜日から始まります。weekday を SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、または SATURDAY に置換します。 |
isoweek | ISO 8601 に準拠: 週は月曜日から始まり、年の最初の週は少なくとも4日を含める必要があります。 |
date_part が省略された場合、週は月曜日から始まり、年境界ルールが適用されます。1月1日を含む週は、その週の大部分の日数 (4日以上) を含む年に属します。
戻り値
入力タイプに応じて BIGINT または INT を返します。
| 入力タイプ | 戻り値の型 |
|---|---|
| DATETIME | BIGINT |
| STRING (Hive非互換エディション) | BIGINT |
| STRING (Hive互換エディション) | INT |
| DATE、TIMESTAMP、TIMESTAMP_NTZ | INT |
| 無効なSTRINGフォーマット | NULL |
| NULL | NULL |
| その他のタイプ | エラー |
注意事項
DATE および TIMESTAMP 型は MaxCompute 1.0 ではサポートされていません。これらの型を使用するには、MaxCompute 2.0 データ型を有効にします。
SET odps.sql.type.system.odps2=true;Hive互換データ型エディションでは、
date_partパラメーターはサポートされておらず、STRING 入力はyyyy-mm-ddフォーマットに従う必要があります。
例
例1: 年境界の週の割り当て
date_part が省略された場合、年境界の週は、その週の大部分の日数を含む年に属します。
-- 2024-12-29 は、その大部分が2024年に含まれる週です。
-- 52 を返します。
SELECT WEEKOFYEAR(TO_DATE('20241229', 'YYYYMMDD'));
-- 2025-12-29 の週は、2025-12-29 (月曜日) から 2026-01-04 (日曜日) までです。
-- 7日間のうち4日間が2026年に含まれるため、この週は2026年の第1週です。
-- 1 を返します。
SELECT WEEKOFYEAR(TO_DATE('20251229', 'YYYYMMDD'));
-- 2026-01-01 は上記の週と同じ、つまり2026年の第1週に含まれます。
-- 1 を返します。
SELECT WEEKOFYEAR(TO_DATE('20260101', 'YYYYMMDD'));例2: 週の開始日の制御
date_part パラメーターは、日付が属する週を変更します。week(monday) を明示的に渡した場合、デフォルト (date_part なし) とは異なる結果が生成されることに注意してください。これは、どちらも月曜日を週の開始日として使用している場合でも同様です。
-- DATE型を使用するには、MaxCompute 2.0 データ型を有効にします。
SET odps.sql.type.system.odps2=true;
-- デフォルト (date_part なし): 月曜日開始、4日間のしきい値。
-- 14 を返します。
SELECT WEEKOFYEAR(DATE '2025-03-31');
-- 週の開始日を明示的に月曜日に設定します。
-- 13 を返します。
SELECT WEEKOFYEAR(DATE '2025-03-31', 'week(monday)');
-- 週は日曜日から始まります。
-- 13 を返します。
SELECT WEEKOFYEAR(DATETIME '2025-03-31 10:32:00', 'week(sunday)');
-- 週は金曜日から始まります。
-- 13 を返します。
SELECT WEEKOFYEAR(TIMESTAMP_NTZ '2025-03-31 10:32:00.123', 'week(friday)');例3: ISO週番号付け
ISO 8601 週番号付けには isoweek を使用します。週は月曜日から始まり、年の最初の週は少なくとも4日を含める必要があります。
SET odps.sql.type.system.odps2=true;
-- ISO 8601 によると、2025-01-06 は第2週に含まれます。
-- 2 を返します。
SELECT WEEKOFYEAR(DATE '2025-01-06', 'isoweek');例4: 入力タイプのバリエーション
-- DATETIME 入力は BIGINT を返します。
-- 1 を返します。
SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00');
-- 明示的な week(monday) を指定した DATETIME。
-- 0 を返します。
SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00', 'week(monday)');
-- yyyy-mm-dd hh:mi:ss フォーマットの STRING 入力。
-- 27 を返します。
SELECT WEEKOFYEAR('2025-07-01 12:30:15');
-- TIMESTAMP 入力 (MaxCompute 2.0 データ型が必要です)。
SET odps.sql.type.system.odps2=true;
-- 30 を返します。
SELECT WEEKOFYEAR(TIMESTAMP '2025-07-21 00:30:15.123');例5: NULLおよび無効な入力
-- 文字列が yyyy-mm-dd hh:mi:ss フォーマットと一致しません。
-- NULL を返します。
SELECT WEEKOFYEAR('20141231');
-- NULL 入力は NULL を返します。
SELECT WEEKOFYEAR(NULL);関連関数
WEEKOFYEAR は日付関数です。日付関数の完全なリストについては、「日付関数」をご参照ください。