ISOYEAR 関数は、指定された date から ISO 8601 年を抽出します。
ISO 8601 の概要
ISO 8601 年は ISO 週日付システムによって定義され、グレゴリオ暦の年とは異なります。具体的には、ISO 年の最初の日は、その年の最初の木曜日を含む週の月曜日です。たとえば、次のようになります。
1 月 1 日が金曜日、土曜日、または日曜日の場合、その週は前の ISO 年の最終週に属します。
1 月 1 日が月曜日、火曜日、または水曜日の場合、その週は新しい ISO 年の最初の週に属します。
これは、ISO 年が前のグレゴリオ暦の最終週に始まり、次のグレゴリオ暦の最初の週に終わる可能性があることを意味します。この定義により、すべての ISO 年がちょうど 52 週または 53 週の完全な週を持つことが保証されます。これにより、時間の計算と年をまたぐ計画が簡素化されます。
構文
INT ISOYEAR(STRING|DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ|INTERVAL <date>)
-- 標準的な例
-- 2025 を返します。
SELECT ISOYEAR(DATE '2025-03-12');パラメーター
date:必須。ISO 年を抽出する日付を指定します。サポートされているデータ型は DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ、STRING、INTERVAL です。
STRING 型の入力パラメーターの場合、値は
yyyy-mm-ddまたはyyyy-mm-dd hh:mi:ss形式である必要があります。INTERVAL 型の入力パラメーターの場合、INTERVAL_YEAR_MONTH のみがサポートされます。INTERVAL_DAY_TIME はサポートされていません。詳細については、「INTERVAL データ型」をご参照ください。
戻り値
INT 型の値を返します。次のルールが適用されます。
date が STRING、DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ、または INTERVAL 型の値でない場合、またはその形式が無効な場合は、NULL が返されるか、エラーが報告されます。
date が NULL の場合、NULL が返されます。
例
例 1:STRING、DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ などのさまざまな日付型から ISO 年を抽出します。
-- MaxCompute V2.0 データ型を有効にします。 SET odps.sql.type.system.odps2 = true; -- 入力は STRING 型です。標準の日付形式の文字列がサポートされています。 -- 2025 を返します。 SELECT ISOYEAR('2025-03-12 12:22:00.123'); -- 入力は TIMESTAMP 型です。 -- 2025 を返します。 SELECT ISOYEAR(TIMESTAMP '2025-03-31 12:43:00'); -- 入力は DATE 型です。 -- 2025 を返します。 SELECT ISOYEAR(DATE '2025-01-01'); -- 入力は DATETIME 型です。 -- 2024 を返します。 SELECT ISOYEAR(DATETIME '2024-01-01 12:30:00'); -- 入力は TIMESTAMP_NTZ (タイムゾーンなしのタイムスタンプ) 型です。マイクロ秒精度がサポートされています。 -- 2025 を返します。 SELECT ISOYEAR(TIMESTAMP_NTZ '2025-06-06 12:43:00.123');例 2:INTERVAL_YEAR_MONTH 型を直接入力として使用します。
-- MaxCompute V2.0 データ型を有効にします。 SET odps.sql.type.system.odps2 = true; -- 入力は 1 年 2 か月の間隔です。年の要素は 1 です。 -- 1 を返します。 SELECT ISOYEAR(INTERVAL '1-2' YEAR TO MONTH); -- 入力 INTERVAL '14' MONTH は INTERVAL '1-2' YEAR TO MONTH に相当します。 -- 1 を返します。 SELECT ISOYEAR(INTERVAL '14' MONTH);例 3:日付と INTERVAL を組み合わせた算術演算の結果から ISO 年を計算します。
-- MaxCompute V2.0 データ型を有効にします。 SET odps.sql.type.system.odps2 = true; -- 開始日 2023-01-01 に 1 年 2 か月の間隔を加えると、2024-03-01 になります。この日付は ISO 年 2024 に属します。 -- 2024 を返します。 SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '1-2' YEAR TO MONTH); -- 9 年を引くと 2014-01-01 になります。この日は水曜日であり、ISO 年 2014 の最初の週に属します。 -- 2014 を返します。 SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '-9' YEAR); -- 11 か月を加えると 2023-12-01 になります。この日付は ISO 年 2023 に属します。 -- 2023 を返します。 SELECT ISOYEAR(DATE '2023-01-01' + INTERVAL '11' MONTH);例 4:年末年始の境界で ISO 年を決定します。
-- MaxCompute V2.0 データ型を有効にします。 SET odps.sql.type.system.odps2 = true; -- 2023 年 1 月 1 日は日曜日です。これは ISO 年 2022 の最終週に属します。 -- 2022 を返します。 SELECT ISOYEAR(DATETIME '2023-01-01 12:30:00'); -- 2024 年 12 月 30 日は月曜日です。これは ISO 年 2025 の最初の週に属します。 -- 2025 を返します。 SELECT ISOYEAR('2024-12-30'); -- 2025 年 1 月 1 日は水曜日です。これは ISO 年 2025 の最初の週に属します。 -- 2025 を返します。 SELECT ISOYEAR('2025-01-01 00:00:00');例 5:NULL 入力を処理します。
-- date の値が NULL の場合、NULL が返されます。 SELECT ISOYEAR(NULL);
関連関数
ISOYEAR 関数は日付関数です。日付の計算と変換に関する関数の詳細については、「日付関数」をご参照ください。