WEEKOFYEAR 関数は、指定された date の年の週を返します。date_part パラメーターを使用して、週の最初の日を指定できます。
構文
BIGINT|INT WEEKOFYEAR (STRING|DATETIME|DATE|TIMESTAMP|TIMESATMP_NTZ <date> [, STRING <date_part>])
パラメーター
-
date: 必須。STRING、DATETIME、DATE、TIMESTAMP、または TIMESTAMP_NTZ 型の値。
入力が STRING の場合、フォーマットは
yyyy-mm-dd hh:mi:ssです。Hive 互換のデータ型エディションでは、フォーマットはyyyy-mm-ddで、date_part パラメーターはサポートされていません。 -
date_part: オプション。STRING 値。有効な値は、
isoweek、week、またはweek(weekday)です。時間単位
値
週
week: 週は月曜日に始まります。これはweek(monday)と同等です。week(weekday): 週は指定された曜日(weekday)に始まります。有効な値: SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、および SATURDAY。
ISO 週
isoweekは ISO 8601 で定義された週の境界を使用します。ISO 週は月曜日に始まります。date_part パラメーターを指定しない場合、次のルールが適用されます:
-
デフォルトでは、週は月曜日に始まります。
-
1 月 1 日を含む週は、その週のほとんどの日 (4 日以上) を含む年に割り当てられます。
戻り値
次のルールに基づいて BIGINT または INT 値を返します。
-
入力日付が DATETIME の場合、BIGINT 値が返されます。
-
入力日付が STRING の場合、Hive 互換のデータ型エディションでは INT 値が返されます。それ以外の場合は、BIGINT 値が返されます。
-
入力日付が DATE、TIMESTAMP、または TIMESTAMP_NTZ の場合、INT 値が返されます。
-
入力日付が STRING、DATETIME、DATE、TIMESTAMP、または TIMESTAMP_NTZ 以外の型の場合、エラーが返されます。
-
STRING の日付値のフォーマットが無効な場合、NULL が返されます。
-
入力日付が NULL の場合、関数は NULL を返します。
例
-
例 1: 年の初めまたは終わりの日付の週番号を決定します。
年の初めまたは終わりの日付に対して date_part パラメーターを指定しない場合、週はその日のほとんどを含む年に割り当てられます。
-- 戻り値は 52 です。 SELECT WEEKOFYEAR(TO_DATE('20241229', 'YYYYMMDD')); -- 2025-12-29 の週は 2025-12-29 (月曜日) に始まり、2026-01-04 に終わります。ほとんどの日 (4 日) は 2026 年にあります。したがって、この週は 2026 年の最初の週と見なされます。 -- 戻り値は 1 です。 SELECT WEEKOFYEAR(TO_DATE('20251229', 'YYYYMMDD')); -- 2026-01-01 は新年にあり、その週のほとんどの日は 2026 年にあります。したがって、この週は 2026 年の最初の週と見なされます。 -- 戻り値は 1 です。 SELECT WEEKOFYEAR(TO_DATE('20260101', 'YYYYMMDD')); -
例 2: 異なるルールを使用して週の最初の日を指定します。
date_part パラメーターを使用して、週の最初の日を指定します。これは週番号に影響します。
-- DATE データ型は MaxCompute 1.0 ではサポートされていません。DATE 型のパラメーターを渡すには、MaxCompute 2.0 のデータ型を有効にする必要があります。 SET odps.sql.type.system.odps2=true; -- デフォルトでは、週は月曜日に始まり、最初の週にはその年の少なくとも 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 標準に基づいて週番号を計算します。
isoweekを使用して ISO 8601 標準に従います。この標準では、週は月曜日に始まり、最初の週にはその年の少なくとも 4 日間が含まれている必要があります。-- DATE データ型は MaxCompute 1.0 ではサポートされていません。DATE 型のパラメーターを渡すには、MaxCompute 2.0 のデータ型を有効にする必要があります。 SET odps.sql.type.system.odps2=true; -- ISO 週標準によれば、2025-01-06 は第 2 週です。 -- 戻り値は 2 です。 SELECT WEEKOFYEAR(DATE '2025-01-06','isoweek'); -
例 4: 入力にさまざまな日付と時刻のデータ型を使用します。
-- 入力は DATETIME 型です。 -- 戻り値は 1 です。 SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00'); -- 戻り値は 0 です。 SELECT WEEKOFYEAR(DATETIME '2025-01-05 10:32:00','week(monday)'); -- 入力は標準の日付フォーマットの文字列です。 -- 戻り値は 27 です。 SELECT WEEKOFYEAR('2025-07-01 12:30:15'); -- TIMESTAMP データ型は MaxCompute 1.0 ではサポートされていません。TIMESTAMP 型のパラメーターを渡すには、MaxCompute 2.0 のデータ型を有効にする必要があります。 SET odps.sql.type.system.odps2=true; -- 入力は TIMESTAMP 型です。 -- 戻り値は 30 です。 SELECT WEEKOFYEAR(TIMESTAMP '2025-07-21 00:30:15.123'); -
例 5: 異常な入力と境界入力を処理します。
-- 文字列のフォーマットが yyyy-mm-dd hh:mi:ss と一致せず、解析できません。 -- 戻り値は NULL です。 SELECT WEEKOFYEAR('20141231'); -- 戻り値は NULL です。 SELECT WEEKOFYEAR(NULL);
関連関数
WEEKOFYEAR は日付関数です。日付関数の詳細については、「日付関数」をご参照ください。