すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:日付関数

最終更新日:Sep 17, 2026

本トピックでは、MaxCompute がサポートする日付関数の構文とパラメーターについて説明します。 また、日付関数の使用例も提供します。 ビジネス要件に基づいて、適切な日付関数を選択して日付の計算や変換を実行できます。

関数

説明

ADD_MONTHS

指定した日付に月数を加算した後の日付値を返します。

CURRENT_TIMESTAMP

現在のタイムスタンプを返します。

CURRENT_TIMEZONE

現在のシステムのタイムゾーンを返します。

DATE_ADD

delta で指定された間隔に基づいて、日付値に日数を加算または減算します。 日単位の変更のみがサポートされています。 DATE_ADD 関数は DATE_SUB 関数の逆です。

DATEADD

datepart で指定された時間単位と delta で指定された間隔に基づいて日付値を変更します。 年、月、日、時、分、または秒単位の変更がサポートされています。

DATE_FORMAT

日付値を指定された形式の文字列に変換します。

DATE_SUB

delta で指定された間隔に基づいて、日付値に日数を加算または減算します。 DATE_SUB 関数は DATE_ADD 関数の逆です。

DATEDIFF

datepart で指定された時間単位に基づいて、2 つの日付値の差を計算します。

DATEPART

datepart で指定された時間単位に基づいて、日付値の指定されたコンポーネントを返します。

DATETRUNC

datepart で指定された時間単位に基づいて日付値を切り捨てます。

DAY

日付値が属する日を返します。

DAYOFMONTH

日付値の日コンポーネントを返します。

DAYOFWEEK

日付値が属する曜日を返します。

DAYOFYEAR

年の通日を表す整数を返します。

EXTRACT

タイムスタンプの指定されたコンポーネントを返します。

FROM_UNIXTIME

BIGINT 型の UNIX タイムスタンプを DATETIME 型の日付値に変換します。

FROM_UTC_TIMESTAMP

UTC タイムスタンプを指定されたタイムゾーンのタイムスタンプに変換します。

GETDATE

現在のシステム時刻を日付値として返します。

HOUR

日付値の時コンポーネントを返します。

ISDATE

日付文字列が指定された形式の日付値に変換できるかどうかを判断します。

LAST_DAY

日付値が属する月の最終日を返します。

LASTDAY

日付値が属する月の最終日を返します。

MINUTE

日付値の分コンポーネントを返します。

MONTH

日付値が属する月を返します。

MONTHS_BETWEEN

指定された日付値間の月数を返します。

NEXT_DAY

日付値より後で、指定された週に一致する最初の曜日の日付を返します。

NOW

現在のシステムの日付と時刻を返します。

QUARTER

日付値が属する四半期を返します。

SECOND

日付値の秒コンポーネントを返します。

TO_CHAR

日付値を指定された形式の文字列に変換します。

TO_DATE

文字列を指定された形式の日付値に変換します。

TO_MILLIS

日付値をミリ秒単位で正確な UNIX タイムスタンプに変換します。

TRUNC_TIME

指定された datepart の時間単位に従って日付または時刻データを切り捨て、STRING 型のデータを返します。

UNIX_TIMESTAMP

日付値を整数である UNIX タイムスタンプに変換します。

WEEKDAY

日付値が属する曜日を表す数値を返します。

WEEKOFYEAR

日付値が属する年の週を表す数値を返します。

YEAR

日付値が属する年を返します。

注意事項

MaxCompute V2.0 は追加の関数を提供します。 使用する関数に MaxCompute V2.0 データ型バージョンでサポートされている新しいデータ型が含まれる場合は、SET ステートメントを実行して MaxCompute V2.0 データ型バージョンを有効にする必要があります。 新しいデータ型には、TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、BINARY が含まれます。

  • セッションレベル:MaxCompute V2.0 データ型バージョンを使用するには、実行する SQL ステートメントの前に set odps.sql.type.system.odps2=true; を追加し、それらを一緒にコミットして実行する必要があります。

  • プロジェクトレベル:プロジェクトオーナーは、プロジェクトの要件に基づいてプロジェクトの MaxCompute V2.0 データ型バージョンを有効にできます。 この構成は 10〜15 分後に有効になります。 プロジェクトレベルで MaxCompute V2.0 データ型バージョンを有効にするには、次のコマンドを実行します。

    setproject odps.sql.type.system.odps2=true; 

    setproject の詳細については、「プロジェクト操作」をご参照ください。 プロジェクトレベルで MaxCompute V2.0 データ型バージョンを有効にする際に注意すべき事項の詳細については、「データ型バージョンガイド」をご参照ください。

サンプルデータ

このセクションでは、日付関数の使用方法を理解するためのサンプルソースデータを提供します。 このトピックでは、mf_date_fun_t という名前のテーブルが作成され、データがテーブルに挿入されます。 サンプルステートメント:

CREATE TABLE IF NOT EXISTS mf_date_fun_t(
    id      INT,
    date1   DATE,
    datetime1   DATETIME,
    timestamp1 TIMESTAMP,
    date2   DATE,
    datetime2   DATETIME,
    timestamp2 TIMESTAMP,
    date3 STRING,
    date4 BIGINT);
    
INSERT INTO mf_date_fun_t VALUES 
(1,DATE'2021-11-29',DATETIME'2021-11-29 00:01:00',TIMESTAMP'2021-01-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-20',123456780),
(2,DATE'2021-11-28',DATETIME'2021-11-28 00:02:00',TIMESTAMP'2021-02-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-21',123456781),
(3,DATE'2021-11-27',DATETIME'2021-11-27 00:03:00',TIMESTAMP'2021-03-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-22',123456782),
(4,DATE'2021-11-26',DATETIME'2021-11-26 00:04:00',TIMESTAMP'2021-04-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-23',123456783),
(5,DATE'2021-11-25',DATETIME'2021-11-25 00:05:00',TIMESTAMP'2021-05-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-24',123456784),
(6,DATE'2021-11-24',DATETIME'2021-11-24 00:06:00',TIMESTAMP'2021-06-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-25',123456785),
(7,DATE'2021-11-23',DATETIME'2021-11-23 00:07:00',TIMESTAMP'2021-07-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-26',123456786),
(8,DATE'2021-11-22',DATETIME'2021-11-22 00:08:00',TIMESTAMP'2021-08-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-27',123456787),
(9,DATE'2021-11-21',DATETIME'2021-11-21 00:09:00',TIMESTAMP'2021-09-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-28',123456788),
(10,DATE'2021-11-20',DATETIME'2021-11-20 00:10:00',TIMESTAMP'2021-10-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-29',123456789);

mf_date_fun_t テーブルからデータをクエリします。 サンプルステートメント:

SELECT * FROM mf_date_fun_t;

次の結果が返されます。

+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
| id         | date1      | datetime1           | timestamp1              | date2      | datetime2           | timestamp2              | date3      | date4      |
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
| 1          | 2021-11-29 | 2021-11-29 00:01:00 | 2021-01-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-20 | 123456780  |
| 2          | 2021-11-28 | 2021-11-28 00:02:00 | 2021-02-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-21 | 123456781  |
| 3          | 2021-11-27 | 2021-11-27 00:03:00 | 2021-03-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-22 | 123456782  |
| 4          | 2021-11-26 | 2021-11-26 00:04:00 | 2021-04-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-23 | 123456783  |
| 5          | 2021-11-25 | 2021-11-25 00:05:00 | 2021-05-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-24 | 123456784  |
| 6          | 2021-11-24 | 2021-11-24 00:06:00 | 2021-06-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-25 | 123456785  |
| 7          | 2021-11-23 | 2021-11-23 00:07:00 | 2021-07-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-26 | 123456786  |
| 8          | 2021-11-22 | 2021-11-22 00:08:00 | 2021-08-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-27 | 123456787  |
| 9          | 2021-11-21 | 2021-11-21 00:09:00 | 2021-09-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-28 | 123456788  |
| 10         | 2021-11-20 | 2021-11-20 00:10:00 | 2021-10-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-29 | 123456789  |
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+

ADD_MONTHS

  • 構文

    STRING ADD_MONTHS(DATE|DATETIME|TIMESTAMP|STRING <startdate>, INT <num_months>)
  • 説明

    startdatenum_months で指定された月数を加算した後の日付値を返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    パラメーター

    必須

    説明

    startdate

    はい

    DATE、DATETIME、TIMESTAMP、または STRING 型の値。 値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss.ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

    num_months

    はい

    INT 型の値。

  • 戻り値

    STRING 型の値が返されます。 戻り値は yyyy-mm-dd 形式です。 戻り値は、次のルールに基づいて変化します。

    • startdate の値が DATE、DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • startdate の値が null の場合、エラーが返されます。

    • num_months の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 2017-05-14 です。 
      SELECT ADD_MONTHS('2017-02-14',3);
      
      -- 戻り値は 0017-05-14 です。 
      SELECT ADD_MONTHS('17-2-14',3);
      
      -- 戻り値は 2017-05-14 です。 
      SELECT ADD_MONTHS('2017-02-14 21:30:00',3);
      
      -- 戻り値は NULL です。 
      SELECT ADD_MONTHS('20170214',3);
      
      -- 戻り値は NULL です。 
      SELECT ADD_MONTHS('2017-02-14 21:30:00',null);
    • テーブルデータの例

      date1、datetime1、timestamp1、date3 列の日付に指定された月数を加算します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             ADD_MONTHS(date1,1) AS date1_add_months, 
             datetime1, 
             ADD_MONTHS(datetime1, 2) AS datetime1_add_months, 
             timestamp1, 
             ADD_MONTHS(timestamp1,3) AS timestamp1_add_months, 
             date3, 
             ADD_MONTHS(date3,4) AS date3_add_months 
      FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
      | date1      | date1_add_months | datetime1           | datetime1_add_months | timestamp1                    | timestamp1_add_months | date3      | date3_add_months |
      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
      | 2021-11-29 | 2021-12-29       | 2021-11-29 00:01:00 | 2022-01-29           | 2021-01-11 00:00:00.123456789 | 2021-04-11            | 2021-11-20 | 2022-03-20       |
      | 2021-11-28 | 2021-12-28       | 2021-11-28 00:02:00 | 2022-01-28           | 2021-02-11 00:00:00.123456789 | 2021-05-11            | 2021-11-21 | 2022-03-21       |
      | 2021-11-27 | 2021-12-27       | 2021-11-27 00:03:00 | 2022-01-27           | 2021-03-11 00:00:00.123456789 | 2021-06-11            | 2021-11-22 | 2022-03-22       |
      | 2021-11-26 | 2021-12-26       | 2021-11-26 00:04:00 | 2022-01-26           | 2021-04-11 00:00:00.123456789 | 2021-07-11            | 2021-11-23 | 2022-03-23       |
      | 2021-11-25 | 2021-12-25       | 2021-11-25 00:05:00 | 2022-01-25           | 2021-05-11 00:00:00.123456789 | 2021-08-11            | 2021-11-24 | 2022-03-24       |
      | 2021-11-24 | 2021-12-24       | 2021-11-24 00:06:00 | 2022-01-24           | 2021-06-11 00:00:00.123456789 | 2021-09-11            | 2021-11-25 | 2022-03-25       |
      | 2021-11-23 | 2021-12-23       | 2021-11-23 00:07:00 | 2022-01-23           | 2021-07-11 00:00:00.123456789 | 2021-10-11            | 2021-11-26 | 2022-03-26       |
      | 2021-11-22 | 2021-12-22       | 2021-11-22 00:08:00 | 2022-01-22           | 2021-08-11 00:00:00.123456789 | 2021-11-11            | 2021-11-27 | 2022-03-27       |
      | 2021-11-21 | 2021-12-21       | 2021-11-21 00:09:00 | 2022-01-21           | 2021-09-11 00:00:00.123456789 | 2021-12-11            | 2021-11-28 | 2022-03-28       |
      | 2021-11-20 | 2021-12-20       | 2021-11-20 00:10:00 | 2022-01-20           | 2021-10-11 00:00:00.123456789 | 2022-01-11            | 2021-11-29 | 2022-03-29       |
      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+

CURRENT_TIMESTAMP

  • 構文

    TIMESTAMP CURRENT_TIMESTAMP()
  • 説明

    現在のタイムスタンプを返します。 戻り値は固定ではありません。 この関数は MaxCompute V2.0 の追加関数です。

  • 戻り値

    TIMESTAMP 型の値が返されます。

  • -- 戻り値は '2017-08-03 11:50:30.661' です。 
    SET odps.sql.type.system.odps2=true;
    SELECT CURRENT_TIMESTAMP(); 

CURRENT_TIMEZONE

  • 構文

    STRING CURRENT_TIMEZONE()
  • 説明

    現在のシステムのタイムゾーンを返します。

  • 戻り値

    STRING 型の値が返されます。

  • -- 戻り値は Asia/Shanghai です。 
    SELECT CURRENT_TIMEZONE();

DATE_ADD

  • 構文

    DATE DATE_ADD(DATE|TIMESTAMP|STRING <startdate>, BIGINT <delta>)
  • 説明

    startdate で指定された日付値に、delta で指定された日数を加算または減算します。

    説明
    • 現在時刻に日数を加算または減算するには、この関数を GETDATE 関数と組み合わせて使用できます。

    • 時、分、または秒レベルで正確な調整を行う必要がある場合は、DATEADD 関数をご参照ください。 この関数は、年、月、日、時、分、または秒のうち単一の単位の増減のみをサポートします。 複数の粒度を同時に調整する必要がある場合は、ユーザー定義関数を使用することを推奨します。

    • この関数のロジックは DATE_SUB 関数の逆です。

  • パラメーター

    パラメーター

    必須

    説明

    startdate

    はい

    開始日。 DATE、DATETIME、または STRING 型の値がサポートされています。

    入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATE 型に変換されます。 STRING 型の入力値には、'2019-12-27' のように、少なくとも 'yyyy-mm-dd' 部分が含まれている必要があります。

    delta

    はい

    加算または減算する日数。 このパラメーターの値は BIGINT 型である必要があります。 delta の値が 0 より大きい場合、日数が開始日に加算されます。 delta の値が 0 未満の場合、日数が開始日から減算されます。 delta の値が 0 の場合、日付値は変更されません。

  • 戻り値

    DATE 型の値が返されます。 戻り値は yyyy-mm-dd 形式です。 戻り値は、次のルールに基づいて変化します。

    • startdate の値が DATE、DATETIME、または STRING 型でない場合、エラーが返されます。

    • startdate の値が null の場合、エラーが返されます。

    • delta の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 2005-03-01 です。 1 日加算すると、結果は 2 月の最終日を超えます。 3 月の最初の日が返されます。 
      SELECT DATE_ADD(DATETIME '2005-02-28 00:00:00', 1);
      
      -- 戻り値は 2005-02-27 です。 1 日減算されます。 
      SELECT DATE_ADD(DATE '2005-02-28', -1);
      
      -- 戻り値は 2005-03-20 です。 
      SET odps.sql.type.system.odps2=false; 
      SELECT DATE_ADD('2005-02-28 00:00:00', 20);
      
      -- 現在時刻が 2020-11-17 16:31:44 の場合、戻り値は 2020-11-16 です。 
      SELECT DATE_ADD(getdate(),-1);
      
      -- 戻り値は NULL です。 
      SELECT DATE_ADD('2005-02-28 00:00:00', null);
    • テーブルデータの例

      delta で指定された日数に基づいて、date1、datetime1、timestamp1 列の日付値を変更します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATE_ADD(date1, 1) AS date1_date_add, 
             datetime1, 
             DATE_ADD(datetime1, -1) AS datetime1_date_add, 
             timestamp1, 
             DATE_ADD(timestamp1, 0) AS timestamp1_date_add 
      FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+
      | date1      | date1_date_add | datetime1           | datetime1_date_add| timestamp1                    | timestamp1_date_add|
      +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+
      | 2021-11-29 | 2021-11-30     | 2021-11-29 00:01:00 | 2021-11-28        | 2021-01-11 00:00:00.123456789 | 2021-01-11         |
      | 2021-11-28 | 2021-11-29     | 2021-11-28 00:02:00 | 2021-11-27        | 2021-02-11 00:00:00.123456789 | 2021-02-11         |
      | 2021-11-27 | 2021-11-28     | 2021-11-27 00:03:00 | 2021-11-26        | 2021-03-11 00:00:00.123456789 | 2021-03-11         |
      | 2021-11-26 | 2021-11-27     | 2021-11-26 00:04:00 | 2021-11-25        | 2021-04-11 00:00:00.123456789 | 2021-04-11         |
      | 2021-11-25 | 2021-11-26     | 2021-11-25 00:05:00 | 2021-11-24        | 2021-05-11 00:00:00.123456789 | 2021-05-11         |
      | 2021-11-24 | 2021-11-25     | 2021-11-24 00:06:00 | 2021-11-23        | 2021-06-11 00:00:00.123456789 | 2021-06-11         |
      | 2021-11-23 | 2021-11-24     | 2021-11-23 00:07:00 | 2021-11-22        | 2021-07-11 00:00:00.123456789 | 2021-07-11         |
      | 2021-11-22 | 2021-11-23     | 2021-11-22 00:08:00 | 2021-11-21        | 2021-08-11 00:00:00.123456789 | 2021-08-11         |
      | 2021-11-21 | 2021-11-22     | 2021-11-21 00:09:00 | 2021-11-20        | 2021-09-11 00:00:00.123456789 | 2021-09-11         |
      | 2021-11-20 | 2021-11-21     | 2021-11-20 00:10:00 | 2021-11-19        | 2021-10-11 00:00:00.123456789 | 2021-10-11         |
      +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+

DATEADD

  • 構文

    DATE|DATETIME DATEADD(DATE|DATETIME|TIMESTAMP <date>, BIGINT <delta>, STRING <datepart>)
  • 説明

    datepart で指定された時間単位と delta で指定された間隔に基づいて date 値を変更します。 現在の時刻に間隔を加算または減算するには、この関数を GETDATE 関数と組み合わせて使用できます。

  • パラメーター

    パラメーター

    必須

    説明

    date

    はい

    DATE、DATETIME、または TIMESTAMP 型の日付値。 値の形式が DATETIME 型の形式 yyyy-mm-dd hh:mi:ss (例: 2021-08-28 00:00:00) に準拠し、MaxCompute V1.0 データ型バージョンが使用されている場合、STRING 型の値は計算前に暗黙的に DATETIME 型の値に変換されます。

    delta

    はい

    日付値の指定されたコンポーネントに加算または減算する間隔。 このパラメーターの値は BIGINT 型である必要があります。 delta の値が 0 より大きい場合、間隔が日付値に加算されます。 それ以外の場合、間隔は日付値から減算されます。 入力値が STRING または DOUBLE 型の場合、値は計算前に暗黙的に BIGINT 型の値に変換されます。

    説明
    • datepart で指定された時間単位に基づいて delta で指定された間隔を加算または減算すると、より大きな日付コンポーネントで桁上がりまたは桁下がりが発生する可能性があります。 年、月、時、分、秒の部分は、それぞれ 10 進数、12 進数、24 進数、60 進数システムに従って計算されます。

    • DATEADD 関数が delta で指定された間隔を日付値の月コンポーネントに加算し、この操作が日コンポーネントでオーバーフローを引き起こさない場合は、日コンポーネントの値を保持します。 それ以外の場合は、日コンポーネントの値を指定された月の最終日に設定します。

    datepart

    はい

    日付値で変更する日付部分。 値は STRING 型の定数です。 入力値の形式が無効であるか、入力値が STRING 型の定数でない場合、エラーが返されます。

    このパラメーターの値は、STRING 型と DATETIME 型の間の変換ルールに準拠して指定されます。 値 yyyy は日付値の年コンポーネントを示します。 値 mm は日付値の月コンポーネントを示します。 値 dd は日付値の日コンポーネントを示します。 型変換のルールの詳細については、「データ型変換」をご参照ください。 拡張日付/時刻形式 (EDTF) もサポートされています。たとえば、-year-month-mon-day、または -hour です。

  • 戻り値

    DATE または DATETIME 型の値が返されます。 戻り値は yyyy-mm-dd または yyyy-mm-dd hh:mi:ss 形式です。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。

    • date の値が null の場合、エラーが返されます。

    • delta または datepart の値が null の場合、null が返されます。

    • 静的データの例

      • 例 1:一般的な使用法

        -- 戻り値は 2005-03-01 00:00:00 です。 1 日加算すると、結果は 2 月の最終日を超えます。 3 月の最初の日が返されます。 
        SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'dd');
        
        -- 戻り値は 2005-02-27 00:00:00 です。 1 日減算されます。 
        SELECT DATEADD(DATETIME '2005-02-28 00:00:00', -1, 'dd');
        
        -- 戻り値は 2006-10-28 00:00:00 です。 20 ヶ月加算すると、月がオーバーフローし、年の値が 1 増加します。 
        SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 20, 'mm');
        
        -- 戻り値は 2005-03-28 00:00:00 です。 
        SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'mm');
        
        -- 戻り値は 2005-02-28 00:00:00 です。 2005 年の 2 月は 28 日しかありません。 したがって、2 月の最終日が返されます。 
        SELECT DATEADD(DATETIME '2005-01-29 00:00:00', 1, 'mm');
        
        -- 戻り値は 2005-02-28 00:00:00 です。 
        SELECT DATEADD(DATETIME '2005-03-30 00:00:00', -1, 'mm');
        
        -- 戻り値は 2005-03-18 です。 
        SELECT DATEADD(DATE '2005-02-18', 1, 'mm');
        
        -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2005-03-18 00:00:00.0 です。 
        SET odps.sql.type.system.odps2=true;
        SELECT DATEADD(TIMESTAMP '2005-02-18 00:00:00', 1, 'mm');
        
        -- 現在時刻が 2020-11-17 16:31:44 の場合、戻り値は 2020-11-16 16:31:44 です。 
        SELECT DATEADD(GETDATE(),-1,'dd');
        
        -- 戻り値は NULL です。 
        SELECT DATEADD(DATE '2005-02-18', 1, null);
        
        -- 戻り値は 2005-03-30 02:24:00 で、3 時間減算されます。 
        SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -3, 'hh');
        
        -- 戻り値は 2005-03-30 04:54:00 で、30 分減算されます。 
        SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'mi');
        
        -- 戻り値は 2005-03-30 05:23:30 で、30 秒減算されます。
        SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'ss');
      • 例 2:DATETIME 型の値を定数として表現する DATEADD の使用

        MaxCompute SQL ステートメントでは、DATETIME 型の値を直接定数として表現することはできません。 次のステートメントでは、DATETIME 型の値の無効な式が使用されています。

        SELECT DATEADD(2005-03-30 00:00:00, -1, 'mm');

        DATETIME 型の定数を記述するには、次のステートメントで DATETIME 型の値の有効な式を使用します。

        -- STRING 型の定数を DATETIME 型に明示的に変換します。 戻り値は 2005-02-28 00:00:00 です。 
        SELECT DATEADD(CAST("2005-03-30 00:00:00" AS datetime), -1, 'mm');
      • 例 3:入力値が STRING 型の場合

        -- 入力値は STRING 型ですが、DATETIME 型の形式に準拠していません。 その結果、エラーが返されます。 
        SELECT DATEADD('2021-08-27',1,'dd');
        
        -- 入力値は STRING 型で、DATETIME 型の形式に準拠しており、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されています。 戻り値は 2005-03-01 00:00:00 です。 
        SET odps.sql.type.system.odps2=false;
        SELECT DATEADD('2005-02-28 00:00:00', 1, 'dd');
    • テーブルデータの例

      datepart で指定された時間単位と delta で指定された間隔に基づいて、date1、datetime1、timestamp1 列の日付値を変更します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATEADD(date1,1,'dd') AS date1_dateadd, 
             datetime1, 
             DATEADD(datetime1,1,'mm') AS datetime1_dateadd, 
             timestamp1, 
             DATEADD(timestamp1,-1,'yyyy') AS timestamp1_dateadd 
      FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+
      | date1      | date1_dateadd | datetime1           | datetime1_dateadd   | timestamp1                    | timestamp1_dateadd            |
      +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+
      | 2021-11-29 | 2021-11-30    | 2021-11-29 00:01:00 | 2021-12-29 00:01:00 | 2021-01-11 00:00:00.123456789 | 2020-01-11 00:00:00.123456789 |
      | 2021-11-28 | 2021-11-29    | 2021-11-28 00:02:00 | 2021-12-28 00:02:00 | 2021-02-11 00:00:00.123456789 | 2020-02-11 00:00:00.123456789 |
      | 2021-11-27 | 2021-11-28    | 2021-11-27 00:03:00 | 2021-12-27 00:03:00 | 2021-03-11 00:00:00.123456789 | 2020-03-11 00:00:00.123456789 |
      | 2021-11-26 | 2021-11-27    | 2021-11-26 00:04:00 | 2021-12-26 00:04:00 | 2021-04-11 00:00:00.123456789 | 2020-04-11 00:00:00.123456789 |
      | 2021-11-25 | 2021-11-26    | 2021-11-25 00:05:00 | 2021-12-25 00:05:00 | 2021-05-11 00:00:00.123456789 | 2020-05-11 00:00:00.123456789 |
      | 2021-11-24 | 2021-11-25    | 2021-11-24 00:06:00 | 2021-12-24 00:06:00 | 2021-06-11 00:00:00.123456789 | 2020-06-11 00:00:00.123456789 |
      | 2021-11-23 | 2021-11-24    | 2021-11-23 00:07:00 | 2021-12-23 00:07:00 | 2021-07-11 00:00:00.123456789 | 2020-07-11 00:00:00.123456789 |
      | 2021-11-22 | 2021-11-23    | 2021-11-22 00:08:00 | 2021-12-22 00:08:00 | 2021-08-11 00:00:00.123456789 | 2020-08-11 00:00:00.123456789 |
      | 2021-11-21 | 2021-11-22    | 2021-11-21 00:09:00 | 2021-12-21 00:09:00 | 2021-09-11 00:00:00.123456789 | 2020-09-11 00:00:00.123456789 |
      | 2021-11-20 | 2021-11-21    | 2021-11-20 00:10:00 | 2021-12-20 00:10:00 | 2021-10-11 00:00:00.123456789 | 2020-10-11 00:00:00.123456789 |
      +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+

DATE_FORMAT

  • 構文

    STRING DATE_FORMAT(DATE|TIMESTAMP|STRING <date>, STRING <format>)
  • 説明

    date 値を指定された format の文字列に変換します。

  • パラメーター

    パラメーター

    必須

    説明

    date

    はい

    変換する日付値。 日付値は DATE、TIMESTAMP、または STRING 型にすることができます。

    • DATE または STRING 型の日付値は、Hive 互換データ型バージョンが有効になっている場合にのみサポートされます。 set odps.sql.hive.compatible=true; コマンドを実行して、Hive 互換データ型バージョンを有効にできます。

    • 日付値が STRING 型の場合、次の形式のみがサポートされます。

      • 'yyyy-MM-dd' (例: '2019-12-27')。

      • 'yyyy-MM-dd hh:mm:ss' (例: '2019-12-27 12:23:10')。

      • 'yyyy-MM-dd hh:mm:ss.SSS' (例: '2019-12-27 12:23:10.123')。

    format

    はい

    STRING 型の定数。 format は、yyyy-MM-dd hh:mm:ss:SSSyyyy-MM-dd hh:mi:ss:SSS などの日付形式を指定します。 値は次のコンポーネントで構成されます。

    • YYYY または yyyy:年。 yyyy は暦年を表し、YYYY は週の年を表します。

      説明

      週の年は実際の年と一致しない場合があります。 週の年形式を使用する場合は注意が必要です。

    • MM:月。

    • mm:分。

    • dd:日。

    • HH:24 時間形式で表される時。

    • hh:12 時間形式で表される時。

    • mi:分。

    • ss:秒。

    • SSS:ミリ秒。

    重要
    • Hive 互換データ型バージョンが無効になっている場合、HHhh は両方とも 24 時間形式が使用されることを示します。 この場合、日付形式は yyyy-MM-dd hh:mi:ss である必要があります。 yyyy-MM-dd hh:mm:ss が使用されている場合、mm コンポーネントは MM コンポーネントと同じ値を取ります。

    • Hive 互換データ型バージョンが有効になっている場合、HH は 24 時間形式が使用されることを示し、hh は 12 時間形式が使用されることを示します。 この場合、日付形式は yyyy-MM-dd hh:mm:ss である必要があります。 yyyy-MM-dd hh:mi:ss が使用されている場合、null が返されます。

  • 戻り値

    STRING 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATE または TIMESTAMP 型でない場合、null が返されます。

    • date の値が null の場合、エラーが返されます。

    • format の値が null の場合、null が返されます。

    • 静的データの例

      -- Hive 互換データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.hive.compatible=true;
      
      -- 現在時刻が 2022-04-24 15:49 の場合、戻り値は 2022-04-24 03:49:01.902 です。 
      SELECT DATE_FORMAT(FROM_UTC_TIMESTAMP(CURRENT_TIMESTAMP(), 'UTC'),'yyyy-MM-dd hh:mm:ss.SSS');
      
      -- 戻り値は 2022-04-24 です。 
      SELECT DATE_FORMAT('2022-04-24','yyyy-MM-dd');
    • テーブルデータの例

      datetime1 および timestamp1 列の日付値を指定された形式の文字列に変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- Hive 互換データ型バージョンと MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.hive.compatible=true;
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, timestamp1, DATE_FORMAT(datetime1,'yyyy/MM/dd'),
             DATE_FORMAT(datetime1,'yyyy/MM/dd HH:mm:ss'),
             DATE_FORMAT(timestamp1,'yyyy/MM/dd HH:mm:ss')
      FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+------------+-----+-----+-----+
      | datetime1  | timestamp1 | _c2 | _c3 | _c4 |
      +------------+------------+-----+-----+-----+
      | 2021-11-29 00:01:00 | 2021-01-11 00:00:00.123456789 | 2021/11/29 | 2021/11/29 00:01:00 | 2021/01/11 00:00:00 |
      | 2021-11-28 00:02:00 | 2021-02-11 00:00:00.123456789 | 2021/11/28 | 2021/11/28 00:02:00 | 2021/02/11 00:00:00 |
      | 2021-11-27 00:03:00 | 2021-03-11 00:00:00.123456789 | 2021/11/27 | 2021/11/27 00:03:00 | 2021/03/11 00:00:00 |
      | 2021-11-26 00:04:00 | 2021-04-11 00:00:00.123456789 | 2021/11/26 | 2021/11/26 00:04:00 | 2021/04/11 00:00:00 |
      | 2021-11-25 00:05:00 | 2021-05-11 00:00:00.123456789 | 2021/11/25 | 2021/11/25 00:05:00 | 2021/05/11 00:00:00 |
      | 2021-11-24 00:06:00 | 2021-06-11 00:00:00.123456789 | 2021/11/24 | 2021/11/24 00:06:00 | 2021/06/11 00:00:00 |
      | 2021-11-23 00:07:00 | 2021-07-11 00:00:00.123456789 | 2021/11/23 | 2021/11/23 00:07:00 | 2021/07/11 00:00:00 |
      | 2021-11-22 00:08:00 | 2021-08-11 00:00:00.123456789 | 2021/11/22 | 2021/11/22 00:08:00 | 2021/08/11 00:00:00 |
      | 2021-11-21 00:09:00 | 2021-09-11 00:00:00.123456789 | 2021/11/21 | 2021/11/21 00:09:00 | 2021/09/11 00:00:00 |
      | 2021-11-20 00:10:00 | 2021-10-11 00:00:00.123456789 | 2021/11/20 | 2021/11/20 00:10:00 | 2021/10/11 00:00:00 |
      +------------+------------+-----+-----+-----+

DATE_SUB

  • 構文

    DATE DATE_SUB(DATE|TIMESTAMP|STRING <startdate>, BIGINT <delta>)
  • 説明

    startdate で指定された日付値に、delta で指定された日数を加算または減算します。

    説明
    • 現在時刻に日数を加算または減算するには、この関数を GETDATE 関数と組み合わせて使用できます。

    • 時、分、または秒レベルで正確な調整を行う必要がある場合は、DATEADD 関数をご参照ください。 この関数は、年、月、日、時、分、または秒のうち単一の単位の増減のみをサポートします。 複数の粒度を同時に調整する必要がある場合は、ユーザー定義関数を使用することを推奨します。

    • この関数のロジックは DATE_ADD 関数の逆です。

  • パラメーター

    パラメーター

    必須

    説明

    startdate

    はい

    開始日。 DATE、DATETIME、または STRING 型の値がサポートされています。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATE 型に変換されます。 STRING 型の入力値には、'2019-12-27' のように、少なくとも 'yyyy-mm-dd' 部分が含まれている必要があります。

    delta

    はい

    加算または減算する日数。 このパラメーターの値は BIGINT 型である必要があります。 delta の値が 0 より大きい場合、日数が開始日から減算されます。 delta の値が 0 未満の場合、日数が開始日に加算されます。 delta の値が 0 の場合、日付値は変更されません。

  • 戻り値

    DATE 型の値が返されます。 戻り値は yyyy-mm-dd 形式です。 戻り値は、次のルールに基づいて変化します。

    • startdate の値が DATE、DATETIME、または STRING 型でない場合、エラーが返されます。

    • startdate の値が null の場合、エラーが返されます。

    • delta の値が null の場合、null が返されます。

    • 静的データの例

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      
      -- 戻り値は 2005-02-28 です。 1 日減算されます。 2 月の最終日が返されます。 
      SELECT DATE_SUB(datetime '2005-03-01 00:00:00', 1);
      
      -- 戻り値は 2005-03-01 です。 1 日加算されます。 
      SELECT DATE_SUB(date '2005-02-28', -1);
      
      -- 戻り値は 2005-02-27 です。 2 日減算されます。 
      SET odps.sql.type.system.odps2=false; 
      SELECT DATE_SUB('2005-03-01 00:00:00', 2);
      
      -- 現在時刻が 2021-09-10 16:31:44 の場合、戻り値は 2021-09-09 です。 
      SELECT DATE_SUB(GETDATE(),1);
      
      -- 戻り値は NULL です。 
      SELECT DATE_SUB('2005-03-01 00:00:00', null);
    • テーブルデータの例

      delta で指定された日数に基づいて、date1、datetime1、timestamp1 列の日付値を変更します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATE_SUB(date1,1) AS date1_date_sub, 
             datetime1, 
             DATE_SUB(datetime1,-1) AS datetime1_date_sub, 
             timestamp1, 
             DATE_SUB(timestamp1,0) AS timestamp1_date_sub 
      FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+
      | date1      | date1_date_sub | datetime1           | datetime1_date_sub | timestamp1                    | timestamp1_date_sub |
      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+
      | 2021-11-29 | 2021-11-28     | 2021-11-29 00:01:00 | 2021-11-30         | 2021-01-11 00:00:00.123456789 | 2021-01-11          |
      | 2021-11-28 | 2021-11-27     | 2021-11-28 00:02:00 | 2021-11-29         | 2021-02-11 00:00:00.123456789 | 2021-02-11          |
      | 2021-11-27 | 2021-11-26     | 2021-11-27 00:03:00 | 2021-11-28         | 2021-03-11 00:00:00.123456789 | 2021-03-11          |
      | 2021-11-26 | 2021-11-25     | 2021-11-26 00:04:00 | 2021-11-27         | 2021-04-11 00:00:00.123456789 | 2021-04-11          |
      | 2021-11-25 | 2021-11-24     | 2021-11-25 00:05:00 | 2021-11-26         | 2021-05-11 00:00:00.123456789 | 2021-05-11          |
      | 2021-11-24 | 2021-11-23     | 2021-11-24 00:06:00 | 2021-11-25         | 2021-06-11 00:00:00.123456789 | 2021-06-11          |
      | 2021-11-23 | 2021-11-22     | 2021-11-23 00:07:00 | 2021-11-24         | 2021-07-11 00:00:00.123456789 | 2021-07-11          |
      | 2021-11-22 | 2021-11-21     | 2021-11-22 00:08:00 | 2021-11-23         | 2021-08-11 00:00:00.123456789 | 2021-08-11          |
      | 2021-11-21 | 2021-11-20     | 2021-11-21 00:09:00 | 2021-11-22         | 2021-09-11 00:00:00.123456789 | 2021-09-11          |
      | 2021-11-20 | 2021-11-19     | 2021-11-20 00:10:00 | 2021-11-21         | 2021-10-11 00:00:00.123456789 | 2021-10-11          |
      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+

DATEDIFF

  • 構文

    BIGINT DATEDIFF(DATE|DATETIME|TIMESTAMP <date1>, DATE|DATETIME|TIMESTAMP <date2>, STRING <datepart>)
  • 説明

    date1date2 の差を計算します。 差は datepart で指定された時間単位で測定されます。

  • パラメーター

    パラメーター

    必須

    説明

    date1 and date2

    はい

    DATE、DATETIME、または TIMESTAMP 型の値。 パラメーターは被減数と減数を指定します。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。

    説明

    MaxCompute V2.0 データ型バージョンのみが TIMESTAMP 型をサポートします。 詳細については、「データ型バージョン 2.0」をご参照ください。

    datepart

    いいえ

    時間単位。STRING 型の定数です。

    MaxCompute V2.0 データ型バージョンを有効にする場合、datepart を空にすることができます。 デフォルト値:day。 MaxCompute V2.0 データ型バージョンの詳細については、「データ型バージョンガイド」をご参照ください。 EDTF もサポートされています。たとえば、-year-month-mon-day、または -hour です。

    説明

    この関数は、datepart で指定された時間単位に基づいて下位単位を省略し、結果を計算します。

  • 戻り値

    BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date1 または date2 の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。

    • date1date2 より小さい場合、戻り値は負になります。

    • date1 または date2 の値が null の場合、null が返されます。

    • datepart の値が null の場合、null が返されます。

    • 静的データの例

      • 例 1

        SET odps.sql.type.system.odps2=true;
        SELECT DATEDIFF(TIMESTAMP '2006-01-01 00:00:00', TIMESTAMP '2005-12-31 23:59:59', 'dd'); 

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | 1          |
        +------------+
      • 例 2

        SET odps.sql.type.system.odps2=true;
        SELECT DATEDIFF(TIMESTAMP '2006-01-01 00:00:00', TIMESTAMP '2005-12-31 23:59:59', 'mm'); 

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | 1          |
        +------------+
      • 例 3

        SELECT  DATEDIFF(DATETIME '2013-05-31 13:00:00', DATETIME '2013-05-31 12:30:00','ss');

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | 1800       |
        +------------+
      • 例 4

        SET odps.sql.type.system.odps2 = false;
        SELECT DATEDIFF('2013-05-31 13:00:00','2013-05-31 12:30:00','mi');

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | 30         |
        +------------+
      • 例 5

        -- ミリ秒単位で正確な日付値は、標準の DATETIME 形式を採用しておらず、暗黙的に DATETIME 型に変換することはできません。 この場合、明示的な変換が必要です。
        SELECT  DATEDIFF(
          TO_DATE('2018-06-04 19:33:23.250','yyyy-mm-dd hh:mi:ss.ff3'),
          TO_DATE('2018-06-04 19:33:23.234','yyyy-mm-dd hh:mi:ss.ff3'),
          'ff3');

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | 16         |
        +------------+

      • 例 6

        SET odps.sql.type.system.odps2=true;
        SELECT  DATEDIFF(DATE '2013-05-21',DATE '2013-05-10',NULL);

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | NULL       |
        +------------+
    • テーブルデータの例

      date1 と date2 列の値の差、datetime1 と datetime2 列の値の差、および timestamp1 と timestamp2 列の値の差を計算します。 差は指定された時間単位で測定されます。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2 = true;
      
      SELECT  date1, 
              date2, 
              DATEDIFF(date1,date2,'dd') AS date1_date2_datediff, 
              datetime1, 
              datetime2, 
              DATEDIFF(datetime1,datetime2,'dd') AS datetime1_datetime2_datediff, 
              timestamp1, 
              timestamp2, 
              DATEDIFF(timestamp1,timestamp2,'mm') AS timestamp1_timestamp2_datediff
      FROM    mf_date_fun_t;

      次の結果が返されます。

      +------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+
      | date1      | date2      | date1_date2_datediff | datetime1           | datetime2           | datetime1_datetime2_datediff | timestamp1                    | timestamp2                    | timestamp1_timestamp2_datediff |
      +------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+
      | 2021-11-29 | 2021-10-29 | 31                   | 2021-11-29 00:01:00 | 2021-10-29 00:00:00 | 31                           | 2021-01-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -9                             |
      | 2021-11-28 | 2021-10-29 | 30                   | 2021-11-28 00:02:00 | 2021-10-29 00:00:00 | 30                           | 2021-02-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -8                             |
      | 2021-11-27 | 2021-10-29 | 29                   | 2021-11-27 00:03:00 | 2021-10-29 00:00:00 | 29                           | 2021-03-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -7                             |
      | 2021-11-26 | 2021-10-29 | 28                   | 2021-11-26 00:04:00 | 2021-10-29 00:00:00 | 28                           | 2021-04-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -6                             |
      | 2021-11-25 | 2021-10-29 | 27                   | 2021-11-25 00:05:00 | 2021-10-29 00:00:00 | 27                           | 2021-05-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -5                             |
      | 2021-11-24 | 2021-10-29 | 26                   | 2021-11-24 00:06:00 | 2021-10-29 00:00:00 | 26                           | 2021-06-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -4                             |
      | 2021-11-23 | 2021-10-29 | 25                   | 2021-11-23 00:07:00 | 2021-10-29 00:00:00 | 25                           | 2021-07-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -3                             |
      | 2021-11-22 | 2021-10-29 | 24                   | 2021-11-22 00:08:00 | 2021-10-29 00:00:00 | 24                           | 2021-08-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -2                             |
      | 2021-11-21 | 2021-10-29 | 23                   | 2021-11-21 00:09:00 | 2021-10-29 00:00:00 | 23                           | 2021-09-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -1                             |
      | 2021-11-20 | 2021-10-29 | 22                   | 2021-11-20 00:10:00 | 2021-10-29 00:00:00 | 22                           | 2021-10-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | 0                              |
      +------------+------------+----------------------+---------------------+---------------------+------------------------------+-------------------------------+-------------------------------+--------------------------------+

DATEPART

  • 構文

    BIGINT DATEPART(DATE|DATETIME|TIMESTAMP <date>, STRING <datepart>)
  • 説明

    datepart で指定された時間単位に基づいて、date 値の指定されたコンポーネントを返します。

  • パラメーター

    パラメーター

    必須

    説明

    date

    はい

    DATE、DATETIME、または TIMESTAMP 型の値。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。

    datepart

    はい

    STRING 型の定数。 このパラメーターは EDTF をサポートします。

    このパラメーターの値は、STRING 型と DATETIME 型の間の変換ルールに準拠して指定されます。 値 yyyy は日付値の年コンポーネントを示します。 値 mm は日付値の月コンポーネントを示します。 値 dd は日付値の日コンポーネントを示します。 型変換のルールの詳細については、「データ型変換」をご参照ください。 EDTF もサポートされています。たとえば、-year-month-mon-day、または -hour です。

  • 戻り値

    BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。

    • date の値が null の場合、エラーが返されます。

    • datepart の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 2013 です。 
      SELECT DATEPART(DATETIME '2013-06-08 01:10:00', 'yyyy'); 
      
      -- 戻り値は 6 です。 
      SELECT DATEPART(DATETIME '2013-06-08 01:10:00', 'mm');
      
      -- 戻り値は 2013 です。 
      SELECT DATEPART(DATE '2013-06-08', 'yyyy');
      
      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2013 です。 
      SET odps.sql.type.system.odps2=true;
      SELECT DATEPART(TIMESTAMP '2013-06-08 01:10:00', 'yyyy');
      
      -- 戻り値は 2013 です。 
      SET odps.sql.type.system.odps2=false;
      SELECT DATEPART('2013-06-08 01:10:00', 'yyyy');
      
      -- 戻り値は NULL です。 
      SELECT DATEPART(DATE '2013-06-08', null);
    • テーブルデータの例

      datepart で指定された時間単位に基づいて、date1、datetime1、timestamp1 列から日付値を抽出します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATEPART(date1,'yyyy') AS date1_datepart, datetime1, 
             DATEPART(datetime1,'dd') AS datetime1_datepart, 
             timestamp1, 
             datepart(timestamp1,'mm') AS timestamp1_datepart 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+
      | date1      | date1_datepart | datetime1           | datetime1_datepart      | timestamp1                    | timestamp1_datepart |
      +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+
      | 2021-11-29 | 2021           | 2021-11-29 00:01:00 | 29                      | 2021-01-11 00:00:00.123456789 | 1                   |
      | 2021-11-28 | 2021           | 2021-11-28 00:02:00 | 28                      | 2021-02-11 00:00:00.123456789 | 2                   |
      | 2021-11-27 | 2021           | 2021-11-27 00:03:00 | 27                      | 2021-03-11 00:00:00.123456789 | 3                   |
      | 2021-11-26 | 2021           | 2021-11-26 00:04:00 | 26                      | 2021-04-11 00:00:00.123456789 | 4                   |
      | 2021-11-25 | 2021           | 2021-11-25 00:05:00 | 25                      | 2021-05-11 00:00:00.123456789 | 5                   |
      | 2021-11-24 | 2021           | 2021-11-24 00:06:00 | 24                      | 2021-06-11 00:00:00.123456789 | 6                   |
      | 2021-11-23 | 2021           | 2021-11-23 00:07:00 | 23                      | 2021-07-11 00:00:00.123456789 | 7                   |
      | 2021-11-22 | 2021           | 2021-11-22 00:08:00 | 22                      | 2021-08-11 00:00:00.123456789 | 8                   |
      | 2021-11-21 | 2021           | 2021-11-21 00:09:00 | 21                      | 2021-09-11 00:00:00.123456789 | 9                   |
      | 2021-11-20 | 2021           | 2021-11-20 00:10:00 | 20                      | 2021-10-11 00:00:00.123456789 | 10                  |
      +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+

DATETRUNC

  • 構文

    DATE|DATETIME DATETRUNC(DATE|DATETIME|TIMESTAMP <date>, STRING <datepart>)
  • 説明

    datepart で指定された時間単位に基づいて date 値を切り捨てます。

  • パラメーター

    パラメーター

    必須

    説明

    date

    はい

    DATE、DATETIME、または TIMESTAMP 型の値。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。

    datepart

    はい

    STRING 型の定数。 このパラメーターは EDTF をサポートします。

    このパラメーターの値は、STRING 型と DATETIME 型の間の変換ルールに準拠して指定されます。 値 yyyy は日付値の年コンポーネントを示します。 値 mm は日付値の月コンポーネントを示します。 値 dd は日付値の日コンポーネントを示します。 型変換のルールの詳細については、「データ型変換」をご参照ください。 EDTF もサポートされています。たとえば、-year-month-mon-day、または -hour です。

  • 戻り値

    DATE または DATETIME 型の値が返されます。 戻り値は yyyy-mm-dd または yyyy-mm-dd hh:mi:ss 形式です。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。

    • date の値が null の場合、エラーが返されます。

    • datepart の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 2011-01-01 00:00:00 です。 
      SELECT DATETRUNC(DATETIME '2011-12-07 16:28:46', 'yyyy');
      
      -- 戻り値は 2011-12-01 00:00:00 です。 
      SELECT DATETRUNC(DATETIME'2011-12-07 16:28:46', 'month');
      
      -- 戻り値は 2011-12-07 00:00:00 です。 
      SELECT DATETRUNC(DATETIME'2011-12-07 16:28:46', 'DD');
      
      -- 戻り値は 2011-01-01 です。 
      SELECT DATETRUNC(DATE '2011-12-07', 'yyyy');
      
      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2011-01-01 00:00:00.0 です。 
      SET odps.sql.type.system.odps2=true;
      SELECT DATETRUNC(TIMESTAMP '2011-12-07 16:28:46', 'yyyy');
      
      -- 戻り値は 2011-01-01 00:00:00.0 です。 
      SET odps.sql.type.system.odps2=false;
      SELECT DATETRUNC('2011-12-07 16:28:46', 'yyyy');
      
      -- 戻り値は NULL です。 
      SELECT DATETRUNC(DATE '2011-12-07', null);
    • テーブルデータの例

      datepart で指定された時間単位に基づいて、date1、datetime1、timestamp1 列の日付値を切り捨てます。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DATETRUNC(date1,'yyyy') AS date1_datetrunc, 
             datetime1, 
             DATETRUNC(datetime1,'dd') AS datetime1_datetrunc, 
             timestamp1, 
             DATETRUNC(timestamp1,'mm') AS timestamp1_datetrunc 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+
      | date1      | date1_datetrunc | datetime1           | datetime1_datetrunc | timestamp1                    | timestamp1_datetrunc |
      +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+
      | 2021-11-29 | 2021-01-01      | 2021-11-29 00:01:00 | 2021-11-29 00:00:00 | 2021-01-11 00:00:00.123456789 | 2021-01-01 00:00:00  |
      | 2021-11-28 | 2021-01-01      | 2021-11-28 00:02:00 | 2021-11-28 00:00:00 | 2021-02-11 00:00:00.123456789 | 2021-02-01 00:00:00  |
      | 2021-11-27 | 2021-01-01      | 2021-11-27 00:03:00 | 2021-11-27 00:00:00 | 2021-03-11 00:00:00.123456789 | 2021-03-01 00:00:00  |
      | 2021-11-26 | 2021-01-01      | 2021-11-26 00:04:00 | 2021-11-26 00:00:00 | 2021-04-11 00:00:00.123456789 | 2021-04-01 00:00:00  |
      | 2021-11-25 | 2021-01-01      | 2021-11-25 00:05:00 | 2021-11-25 00:00:00 | 2021-05-11 00:00:00.123456789 | 2021-05-01 00:00:00  |
      | 2021-11-24 | 2021-01-01      | 2021-11-24 00:06:00 | 2021-11-24 00:00:00 | 2021-06-11 00:00:00.123456789 | 2021-06-01 00:00:00  |
      | 2021-11-23 | 2021-01-01      | 2021-11-23 00:07:00 | 2021-11-23 00:00:00 | 2021-07-11 00:00:00.123456789 | 2021-07-01 00:00:00  |
      | 2021-11-22 | 2021-01-01      | 2021-11-22 00:08:00 | 2021-11-22 00:00:00 | 2021-08-11 00:00:00.123456789 | 2021-08-01 00:00:00  |
      | 2021-11-21 | 2021-01-01      | 2021-11-21 00:09:00 | 2021-11-21 00:00:00 | 2021-09-11 00:00:00.123456789 | 2021-09-01 00:00:00  |
      | 2021-11-20 | 2021-01-01      | 2021-11-20 00:10:00 | 2021-11-20 00:00:00 | 2021-10-11 00:00:00.123456789 | 2021-10-01 00:00:00  |
      +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+

DAY

  • 構文

    INT DAY(DATETIME|TIMESTAMP|DATE|STRING <date>)
  • 説明

    日付値が属する日を返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss:ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、DATE、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 値 1 が返されます。 
      SELECT DAY('2014-09-01');
      
      -- 戻り値は NULL です。 
      SELECT DAY('20140901');
      
      -- 戻り値は NULL です。 
      SELECT DAY(null);
    • テーブルデータの例

      date1、datetime1、timestamp1、date3 列の各日付値が属する日を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DAY(date1) AS date1_day, 
             datetime1, 
             DAY(datetime1) AS datetime1_day, 
             timestamp1, 
             DAY(timestamp1) AS timestamp1_day, 
             date3, 
             DAY(date3) AS date3_day 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+
      | date1      | date1_day | datetime1           | datetime1_day | timestamp1                    | timestamp1_day | date3      | date3_day |
      +------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+
      | 2021-11-29 | 29        | 2021-11-29 00:01:00 | 29            | 2021-01-11 00:00:00.123456789 | 11             | 2021-11-20 | 20        |
      | 2021-11-28 | 28        | 2021-11-28 00:02:00 | 28            | 2021-02-11 00:00:00.123456789 | 11             | 2021-11-21 | 21        |
      | 2021-11-27 | 27        | 2021-11-27 00:03:00 | 27            | 2021-03-11 00:00:00.123456789 | 11             | 2021-11-22 | 22        |
      | 2021-11-26 | 26        | 2021-11-26 00:04:00 | 26            | 2021-04-11 00:00:00.123456789 | 11             | 2021-11-23 | 23        |
      | 2021-11-25 | 25        | 2021-11-25 00:05:00 | 25            | 2021-05-11 00:00:00.123456789 | 11             | 2021-11-24 | 24        |
      | 2021-11-24 | 24        | 2021-11-24 00:06:00 | 24            | 2021-06-11 00:00:00.123456789 | 11             | 2021-11-25 | 25        |
      | 2021-11-23 | 23        | 2021-11-23 00:07:00 | 23            | 2021-07-11 00:00:00.123456789 | 11             | 2021-11-26 | 26        |
      | 2021-11-22 | 22        | 2021-11-22 00:08:00 | 22            | 2021-08-11 00:00:00.123456789 | 11             | 2021-11-27 | 27        |
      | 2021-11-21 | 21        | 2021-11-21 00:09:00 | 21            | 2021-09-11 00:00:00.123456789 | 11             | 2021-11-28 | 28        |
      | 2021-11-20 | 20        | 2021-11-20 00:10:00 | 20            | 2021-10-11 00:00:00.123456789 | 11             | 2021-11-29 | 29        |
      +------------+-----------+---------------------+---------------+-------------------------------+----------------+------------+-----------+

DAYOFMONTH

  • 構文

    INT DAYOFMONTH(DATETIME|TIMESTAMP|DATE|STRING <date>)
  • 説明

    日付値の日コンポーネントを返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss:ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、DATE、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 値 1 が返されます。 
      SELECT DAYOFMONTH('2014-09-01');
      
      -- 戻り値は NULL です。 
      SELECT DAYOFMONTH('20140901');
      
      -- 戻り値は NULL です。 
      SELECT DAYOFMONTH(null);
    • テーブルデータの例

      date1、datetime1、timestamp1、date3 列の日付値の日コンポーネントを取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             DAYOFMONTH(date1) AS date1_dayofmonth, 
             datetime1, 
             DAYOFMONTH(datetime1) AS datetime1_dayofmonth, 
             timestamp1, 
             DAYOFMONTH(timestamp1) AS timestamp1_dayofmonth, 
             date3, 
             DAYOFMONTH(date3) AS date3_dayofmonth 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
      | date1      | date1_dayofmonth | datetime1           | datetime1_dayofmonth | timestamp1                    | timestamp1_dayofmonth | date3      | date3_dayofmonth |
      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
      | 2021-11-29 | 29               | 2021-11-29 00:01:00 | 29                   | 2021-01-11 00:00:00.123456789 | 11                    | 2021-11-20 | 20               |
      | 2021-11-28 | 28               | 2021-11-28 00:02:00 | 28                   | 2021-02-11 00:00:00.123456789 | 11                    | 2021-11-21 | 21               |
      | 2021-11-27 | 27               | 2021-11-27 00:03:00 | 27                   | 2021-03-11 00:00:00.123456789 | 11                    | 2021-11-22 | 22               |
      | 2021-11-26 | 26               | 2021-11-26 00:04:00 | 26                   | 2021-04-11 00:00:00.123456789 | 11                    | 2021-11-23 | 23               |
      | 2021-11-25 | 25               | 2021-11-25 00:05:00 | 25                   | 2021-05-11 00:00:00.123456789 | 11                    | 2021-11-24 | 24               |
      | 2021-11-24 | 24               | 2021-11-24 00:06:00 | 24                   | 2021-06-11 00:00:00.123456789 | 11                    | 2021-11-25 | 25               |
      | 2021-11-23 | 23               | 2021-11-23 00:07:00 | 23                   | 2021-07-11 00:00:00.123456789 | 11                    | 2021-11-26 | 26               |
      | 2021-11-22 | 22               | 2021-11-22 00:08:00 | 22                   | 2021-08-11 00:00:00.123456789 | 11                    | 2021-11-27 | 27               |
      | 2021-11-21 | 21               | 2021-11-21 00:09:00 | 21                   | 2021-09-11 00:00:00.123456789 | 11                    | 2021-11-28 | 28               |
      | 2021-11-20 | 20               | 2021-11-20 00:10:00 | 20                   | 2021-10-11 00:00:00.123456789 | 11                    | 2021-11-29 | 29               |
      +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+

DAYOFWEEK

  • 構文

    INT DAYOFWEEK(DATETIME|TIMESTAMP|DATE|STRING <date>)
  • 説明

    日付値が属する曜日を返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss:ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、DATE、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 戻り値の範囲は 1 から 7 です。 値 1 は日曜日、値 2 は月曜日を示し、他の値にも同じルールが適用されます。

  • -- 戻り値は 5 です。 戻り値は木曜日を示します。 
    SELECT DAYOFWEEK('2009-07-30');

DAYOFYEAR

  • 構文

    INT DAYOFYEAR(DATETIME|TIMESTAMP|DATE|STRING <date>)
  • 説明

    年の通日を表す整数を返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss:ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、DATE、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

  • -- 戻り値は 100 です。 
    SELECT DAYOFYEAR('2016-04-09');

EXTRACT

  • 構文

    INT EXTRACT(<datepart> FROM DATE|DATETIME|TIMESTAMP <date>)
  • 説明

    date で指定された日付値から datepart で指定された日付コンポーネントを抽出します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    パラメーター

    必須

    説明

    datepart

    はい

    値は YEAR、MONTH、DAY、HOUR、MINUTE、または SECOND です。

    date

    はい

    DATE、DATETIME、TIMESTAMP、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss.ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • datepart の値が YEAR、MONTH、DAY、HOUR、MINUTE、または SECOND でない場合、エラーが返されます。

    • datepart の値が null の場合、エラーが返されます。

    • date の値が DATE、DATETIME、TIMESTAMP、または STRING 型でない場合、または null の場合、null が返されます。

    • 静的データの例

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT  EXTRACT(YEAR FROM '2019-05-01 11:21:00') YEAR, 
              EXTRACT(MONTH FROM '2019-05-01 11:21:00') MONTH, 
              EXTRACT(DAY FROM '2019-05-01 11:21:00') DAY, 
              EXTRACT(HOUR FROM '2019-05-01 11:21:00') HOUR, 
              EXTRACT(MINUTE FROM '2019-05-01 11:21:00') MINUTE;
              
      -- 次の結果が返されます。 
      +------+-------+------+------+--------+
      | year | month | day  | hour | minute |
      +------+-------+------+------+--------+
      | 2019 | 5     | 1    | 11   | 21     |
      +------+-------+------+------+--------+
      
      -- 戻り値は NULL です。 
      SELECT  EXTRACT(YEAR FROM null);
    • テーブルデータの例

      timestamp1 列の日付値から指定された日付コンポーネントを抽出します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT timestamp1, 
             EXTRACT(YEAR FROM timestamp1) YEAR, 
             timestamp2, 
             EXTRACT(MONTH from timestamp2) MONTH 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +-------------------------------+------+-------------------------------+-------+
      | timestamp1                    | year | timestamp2                    | month |
      +-------------------------------+------+-------------------------------+-------+
      | 2021-01-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-02-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-03-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-04-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-05-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-06-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-07-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-08-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-09-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      | 2021-10-11 00:00:00.123456789 | 2021 | 2021-10-11 00:00:00.123456789 | 10    |
      +-------------------------------+------+-------------------------------+-------+

FROM_UNIXTIME

  • 構文

    DATETIME FROM_UNIXTIME(BIGINT <unixtime>)
  • 説明

    BIGINT 型の unixtime を DATETIME 型の日付値に変換します。

  • パラメーター

    unixtime:必須。 UNIX 形式の BIGINT 型の日付値。 このパラメーターの値は秒単位で正確です。 有効値:[-62167305600, 253402387200]。

    説明

    入力値が STRING、DOUBLE、または DECIMAL 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に BIGINT 型に変換されます。

  • 戻り値

    DATETIME 型の値が返されます。 戻り値は yyyy-mm-dd hh:mi:ss 形式です。 unixtime の値が null の場合、null が返されます。

    説明

    set odps.sql.hive.compatible=true; コマンドを実行して、Hive 互換データ型バージョンを有効にできます。 Hive 互換データ型バージョンでは、次のルールに注意してください。

    • 入力値が STRING 型の場合、STRING 型の日付値が返されます。

    • 2 番目の入力パラメーターを指定して、戻り値の形式を決定できます。 たとえば、2 番目の入力パラメーターで戻り値の日付と時刻の形式を yyyy-MM-dd または YYYY-MM-dd に指定できます。 yyyy は暦年を表し、YYYY は週の年を表します。 週の年は実際の年と一致しない場合があります。 週の年形式を使用する場合は注意が必要です。

    • 静的データの例

      -- 戻り値は 1973-11-30 05:33:09 です。 
      SELECT FROM_UNIXTIME(123456789);
      
      -- 戻り値は 1973-11-30 05:33:09 です。 
      SET odps.sql.type.system.odps2=false;
      SELECT FROM_UNIXTIME('123456789');
      
      -- 戻り値は NULL です。 
      SELECT FROM_UNIXTIME(null);
    • テーブルデータの例

      date4 列の値を日付値に変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      SELECT date4, FROM_UNIXTIME(date4) AS date4_from_unixtime FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+---------------------+
      | date4      | date4_from_unixtime |
      +------------+---------------------+
      | 123456780  | 1973-11-30 05:33:00 |
      | 123456781  | 1973-11-30 05:33:01 |
      | 123456782  | 1973-11-30 05:33:02 |
      | 123456783  | 1973-11-30 05:33:03 |
      | 123456784  | 1973-11-30 05:33:04 |
      | 123456785  | 1973-11-30 05:33:05 |
      | 123456786  | 1973-11-30 05:33:06 |
      | 123456787  | 1973-11-30 05:33:07 |
      | 123456788  | 1973-11-30 05:33:08 |
      | 123456789  | 1973-11-30 05:33:09 |
      +------------+---------------------+

FROM_UTC_TIMESTAMP

  • 構文

    TIMESTAMP FROM_UTC_TIMESTAMP({any primitive type}*, STRING <timezone>)
  • 説明

    協定世界時 (UTC) から指定されたタイムゾーンに変換されたタイムスタンプを返します。 この関数は MaxCompute V2.0 の追加関数です。

    重要

    FROM_UTC_TIMESTAMP 関数の戻り値は、プロジェクトに設定した odps.sql.timezone の値にも影響されます。 odps.sql.timezone=Asia/Shanghai を設定した場合、UTC+8 タイムゾーンが使用されます。これは UTC より 8 時間進んでいます。 この場合、FROM_UTC_TIMESTAMP 関数の計算結果に 8 時間が加算されます。 たとえば、FROM_UTC_TIMESTAMP(0, 'Asia/Shanghai') 関数は UTC+0 のタイムスタンプを北京時間 (UTC+08:00) のタイムスタンプに変換し、計算結果は 0 + 8 x 3600 = 28800 となります。 odps.sql.timezone=Asia/Shanghai の設定ではさらに 8 時間のオフセットが必要になります。 その結果、戻り値は 1970-01-01 16:00:00 となります。

  • パラメーター

    パラメーター

    必須

    説明

    {any primitive type}*

    はい

    TIMESTAMP、DATETIME、TINYINT、SMALLINT、INT、または BIGINT 型のタイムスタンプ。 値が TINYINT、SMALLINT、INT、または BIGINT 型の場合、時間単位はミリ秒単位で正確です。

    timezone

    はい

    新しいタイムゾーン。

    説明

    検索エンジンを使用してタイムゾーンのリストを検索できます。

  • 戻り値

    TIMESTAMP 型の値が返されます。 戻り値は yyyy-mm-dd hh:mi:ss.ff3 形式です。 戻り値は、次のルールに基づいて変化します。

    • {any primitive type}* の値が TIMESTAMP、DATETIME、TINYINT、SMALLINT、INT、または BIGINT 型でない場合、エラーが返されます。

    • {any primitive type}* の値が null の場合、エラーが返されます。

    • timezone の値が null の場合、null が返されます。

    • 静的データの例

      -- 入力値の時間単位はミリ秒単位で正確で、戻り値は 2017-08-01 04:24:00.0 です。 
      SELECT FROM_UTC_TIMESTAMP(1501557840000, 'PST'); 
      
      -- 戻り値は 1970-01-30 08:00:00.0 です。 
      SELECT FROM_UTC_TIMESTAMP('1970-01-30 16:00:00','PST'); 
      
      -- 戻り値は 1970-01-29 16:00:00.0 です。 
      SELECT FROM_UTC_TIMESTAMP('1970-01-30','PST'); 
      
      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2011-12-25 17:00:00:00.123 です。 
      SET odps.sql.type.system.odps2=true;
      SELECT FROM_UTC_TIMESTAMP(timestamp '2011-12-25 09:00:00.123456', 'Asia/Shanghai');
      
      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2011-12-25 01:55:00.0 です。 
      SET odps.sql.type.system.odps2=true;
      SELECT FROM_UTC_TIMESTAMP(timestamp '2011-12-25 06:55:00', 'America/Toronto');
      
      -- 戻り値は NULL です。 
      SELECT FROM_UTC_TIMESTAMP('1970-01-30',null);
    • テーブルデータの例

      datetime1 および timestamp1 列の日付値を指定されたタイムゾーンのタイムスタンプに変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, 
             FROM_UTC_TIMESTAMP(datetime1,'PST') pst, 
             timestamp1, 
             FROM_UTC_TIMESTAMP(timestamp1,'Asia/Shanghai') asia 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +---------------------+---------------------+-------------------------------+-------------------------------+
      | datetime1           | pst                 | timestamp1                    | asia                          |
      +---------------------+---------------------+-------------------------------+-------------------------------+
      | 2021-11-29 00:01:00 | 2021-11-28 16:01:00 | 2021-01-11 00:00:00.123456789 | 2021-01-11 08:00:00.123456789 |
      | 2021-11-28 00:02:00 | 2021-11-27 16:02:00 | 2021-02-11 00:00:00.123456789 | 2021-02-11 08:00:00.123456789 |
      | 2021-11-27 00:03:00 | 2021-11-26 16:03:00 | 2021-03-11 00:00:00.123456789 | 2021-03-11 08:00:00.123456789 |
      | 2021-11-26 00:04:00 | 2021-11-25 16:04:00 | 2021-04-11 00:00:00.123456789 | 2021-04-11 08:00:00.123456789 |
      | 2021-11-25 00:05:00 | 2021-11-24 16:05:00 | 2021-05-11 00:00:00.123456789 | 2021-05-11 08:00:00.123456789 |
      | 2021-11-24 00:06:00 | 2021-11-23 16:06:00 | 2021-06-11 00:00:00.123456789 | 2021-06-11 08:00:00.123456789 |
      | 2021-11-23 00:07:00 | 2021-11-22 16:07:00 | 2021-07-11 00:00:00.123456789 | 2021-07-11 08:00:00.123456789 |
      | 2021-11-22 00:08:00 | 2021-11-21 16:08:00 | 2021-08-11 00:00:00.123456789 | 2021-08-11 08:00:00.123456789 |
      | 2021-11-21 00:09:00 | 2021-11-20 16:09:00 | 2021-09-11 00:00:00.123456789 | 2021-09-11 08:00:00.123456789 |
      | 2021-11-20 00:10:00 | 2021-11-19 16:10:00 | 2021-10-11 00:00:00.123456789 | 2021-10-11 08:00:00.123456789 |
      +---------------------+---------------------+-------------------------------+-------------------------------+

GETDATE

  • 構文

    DATETIME GETDATE()
  • 説明

    現在のシステム時刻を日付値として返します。 MaxCompute は UTC+08:00 を標準タイムゾーンとして使用します。

  • 戻り値

    現在の日付と時刻が返されます。これは DATETIME 型です。

    説明

    MaxCompute SQL では、GETDATE は常に固定値を返します。 戻り値は、MaxCompute SQL タスクの実行中の任意の時刻です。 時刻は秒単位で正確です。 MaxCompute V2.0 データ型バージョンを有効にすると、時刻はミリ秒単位で正確になります。

HOUR

  • 構文

    INT HOUR(DATETIME|TIMESTAMP|STRING <date>)
  • 説明

    日付値の時コンポーネントを返します。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、または STRING 型の日付値。 日付値は yyyy-mm-dd hh:mi:ss または yyyy-mm-dd hh:mi:ss.ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。 この関数は MaxCompute V2.0 の追加関数です。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 12 です。 
      SELECT HOUR('2014-09-01 12:00:00');
      
      -- 戻り値は 12 です。 
      SELECT HOUR('12:00:00');
      
      -- 戻り値は NULL です。 
      SELECT HOUR('20140901120000');
      
      -- 戻り値は NULL です。 
      SELECT HOUR(null);
    • テーブルデータの例

      datetime1 および timestamp1 列の日付値の時コンポーネントを取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, 
             HOUR(datetime1) AS datetime1_hour, 
             timestamp1, 
             HOUR(timestamp1) AS timestamp1_hour 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +---------------------+----------------+-------------------------------+-----------------+
      | datetime1           | datetime1_hour | timestamp1                    | timestamp1_hour |
      +---------------------+----------------+-------------------------------+-----------------+
      | 2021-11-29 00:01:00 | 0              | 2021-01-11 00:00:00.123456789 | 0               |
      | 2021-11-28 00:02:00 | 0              | 2021-02-11 00:00:00.123456789 | 0               |
      | 2021-11-27 00:03:00 | 0              | 2021-03-11 00:00:00.123456789 | 0               |
      | 2021-11-26 00:04:00 | 0              | 2021-04-11 00:00:00.123456789 | 0               |
      | 2021-11-25 00:05:00 | 0              | 2021-05-11 00:00:00.123456789 | 0               |
      | 2021-11-24 00:06:00 | 0              | 2021-06-11 00:00:00.123456789 | 0               |
      | 2021-11-23 00:07:00 | 0              | 2021-07-11 00:00:00.123456789 | 0               |
      | 2021-11-22 00:08:00 | 0              | 2021-08-11 00:00:00.123456789 | 0               |
      | 2021-11-21 00:09:00 | 0              | 2021-09-11 00:00:00.123456789 | 0               |
      | 2021-11-20 00:10:00 | 0              | 2021-10-11 00:00:00.123456789 | 0               |
      +---------------------+----------------+-------------------------------+-----------------+

ISDATE

  • 構文

    BOOLEAN ISDATE(STRING <date>, STRING <format>)
  • 説明

    日付文字列が指定された形式の日付値に変換できるかどうかを判断します。 日付文字列が指定された形式の日付値に変換できる場合は true が返され、それ以外の場合は false が返されます。

  • パラメーター

    パラメーター

    必須

    説明

    date

    はい

    STRING 型の値。 入力値が BIGINT、DOUBLE、DECIMAL、または DATETIME 型の場合、値は計算前に暗黙的に STRING 型の値に変換されます。

    format

    はい

    STRING 型の定数。 このパラメーターは EDTF をサポートしません。 format に冗長な形式文字列が存在する場合、この関数は最初の形式文字列に対応する日付文字列を日付値に変換します。 残りの文字列は区切り文字と見なされます。 たとえば、isdate("1234-yyyy", "yyyy-yyyy") は true を返します。

  • 戻り値

    BOOLEAN 型の値が返されます。 date または format の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は true です。 
      SELECT ISDATE('2021-10-11','yyyy-mm-dd');
      
      -- 戻り値は false です。 
      SET odps.sql.type.system.odps2=false;
      SELECT ISDATE(1678952314,'yyyy-mm-dd');
    • テーブルデータの例

      date3 列の日付文字列が指定された形式の日付値に変換できるかどうかを判断します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      SELECT date3, ISDATE(date3,'yyyy-mm-dd') AS date3_isdate FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+--------------+
      | date3      | date3_isdate |
      +------------+--------------+
      | 2021-11-20 | true         |
      | 2021-11-21 | true         |
      | 2021-11-22 | true         |
      | 2021-11-23 | true         |
      | 2021-11-24 | true         |
      | 2021-11-25 | true         |
      | 2021-11-26 | true         |
      | 2021-11-27 | true         |
      | 2021-11-28 | true         |
      | 2021-11-29 | true         |
      +------------+--------------+

LAST_DAY

  • 構文

    STRING LAST_DAY(DATE|DATETIME|TIMESTAMP|STRING <date>)
  • 説明

    日付値が属する月の最終日を返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATE、DATETIME、TIMESTAMP、または STRING 型の日付値。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    STRING 型の値が返されます。 戻り値は yyyy-mm-dd 形式です。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATE、DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、エラーが返されます。

    • 静的データの例

      -- 戻り値は 2017-03-31 です。 
      SELECT LAST_DAY('2017-03-04');
      
      -- 戻り値は 2017-07-31 です。 
      SELECT LAST_DAY('2017-07-04 11:40:00');
      
      -- 戻り値は NULL です。 
      SELECT LAST_DAY('20170304');
    • テーブルデータの例

      date1、datetime1、timestamp1、date3 列の各日付値が属する月の最終日を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true; 
      SELECT date1, 
             LAST_DAY(date1) AS date1_lastday, 
             datetime1, 
             LAST_DAY(datetime1) AS datetime1_lastday, 
             timestamp1, 
             LAST_DAY(timestamp1) AS timestamp1_lastday, 
             date3, 
             LAST_DAY(date3) AS date3_lastday 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
      | date1      | date1_lastday | datetime1           | datetime1_lastday | timestamp1                    | timestamp1_lastday | date3      | date3_lastday |
      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
      | 2021-11-29 | 2021-11-30    | 2021-11-29 00:01:00 | 2021-11-30        | 2021-01-11 00:00:00.123456789 | 2021-01-31         | 2021-11-20 | 2021-11-30    |
      | 2021-11-28 | 2021-11-30    | 2021-11-28 00:02:00 | 2021-11-30        | 2021-02-11 00:00:00.123456789 | 2021-02-28         | 2021-11-21 | 2021-11-30    |
      | 2021-11-27 | 2021-11-30    | 2021-11-27 00:03:00 | 2021-11-30        | 2021-03-11 00:00:00.123456789 | 2021-03-31         | 2021-11-22 | 2021-11-30    |
      | 2021-11-26 | 2021-11-30    | 2021-11-26 00:04:00 | 2021-11-30        | 2021-04-11 00:00:00.123456789 | 2021-04-30         | 2021-11-23 | 2021-11-30    |
      | 2021-11-25 | 2021-11-30    | 2021-11-25 00:05:00 | 2021-11-30        | 2021-05-11 00:00:00.123456789 | 2021-05-31         | 2021-11-24 | 2021-11-30    |
      | 2021-11-24 | 2021-11-30    | 2021-11-24 00:06:00 | 2021-11-30        | 2021-06-11 00:00:00.123456789 | 2021-06-30         | 2021-11-25 | 2021-11-30    |
      | 2021-11-23 | 2021-11-30    | 2021-11-23 00:07:00 | 2021-11-30        | 2021-07-11 00:00:00.123456789 | 2021-07-31         | 2021-11-26 | 2021-11-30    |
      | 2021-11-22 | 2021-11-30    | 2021-11-22 00:08:00 | 2021-11-30        | 2021-08-11 00:00:00.123456789 | 2021-08-31         | 2021-11-27 | 2021-11-30    |
      | 2021-11-21 | 2021-11-30    | 2021-11-21 00:09:00 | 2021-11-30        | 2021-09-11 00:00:00.123456789 | 2021-09-30         | 2021-11-28 | 2021-11-30    |
      | 2021-11-20 | 2021-11-30    | 2021-11-20 00:10:00 | 2021-11-30        | 2021-10-11 00:00:00.123456789 | 2021-10-31         | 2021-11-29 | 2021-11-30    |
      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+

LASTDAY

  • 構文

    DATETIME LASTDAY(DATETIME <date>)
  • 説明

    date 値が属する月の最終日を返します。 日コンポーネントのみが切り捨てられます。 時、分、秒のコンポーネントは 00:00:00 として表現されます。

  • パラメーター

    date:DATETIME 型の日付値。 日付値は yyyy-mm-dd hh:mi:ss 形式です。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。

  • 戻り値

    DATETIME 型の値が返されます。 戻り値は yyyy-mm-dd hh:mi:ss 形式です。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME または STRING 型でない場合、または形式が要件を満たしていない場合、エラーが返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 2013-06-30 00:00:00 です。 
      SELECT LASTDAY (DATETIME '2013-06-08 01:10:00');
      
      -- 戻り値は 2013-06-30 00:00:00 です。 
      SET odps.sql.type.system.odps2=false;
      SELECT LASTDAY ('2013-06-08 01:10:00');
      
      -- 戻り値は NULL です。 
      SELECT LASTDAY (null);
    • テーブルデータの例

      datetime1 列の各日付値が属する月の最終日を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      SELECT datetime1, LASTDAY(datetime1) AS datetime1_lastday FROM mf_date_fun_t;

      次の結果が返されます。

      +---------------------+---------------------+
      | datetime1           | datetime1_lastday   |
      +---------------------+---------------------+
      | 2021-11-29 00:01:00 | 2021-11-30 00:00:00 |
      | 2021-11-28 00:02:00 | 2021-11-30 00:00:00 |
      | 2021-11-27 00:03:00 | 2021-11-30 00:00:00 |
      | 2021-11-26 00:04:00 | 2021-11-30 00:00:00 |
      | 2021-11-25 00:05:00 | 2021-11-30 00:00:00 |
      | 2021-11-24 00:06:00 | 2021-11-30 00:00:00 |
      | 2021-11-23 00:07:00 | 2021-11-30 00:00:00 |
      | 2021-11-22 00:08:00 | 2021-11-30 00:00:00 |
      | 2021-11-21 00:09:00 | 2021-11-30 00:00:00 |
      | 2021-11-20 00:10:00 | 2021-11-30 00:00:00 |
      +---------------------+---------------------+

MINUTE

  • 構文

    INT MINUTE(DATETIME|TIMESTAMP|STRING <date>)
  • 説明

    日付値の分コンポーネントを返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、または STRING 型の日付値。 日付値は yyyy-mm-dd hh:mi:ss または yyyy-mm-dd hh:mi:ss.ff3 形式です。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 30 です。  
      SELECT MINUTE('2014-09-01 12:30:00'); 
      
      -- 戻り値は 30 です。 
      SELECT MINUTE('12:30:00');
      
      -- 戻り値は NULL です。 
      SELECT MINUTE('20140901120000');
      
      -- 戻り値は NULL です。 
      SELECT MINUTE(null);
    • テーブルデータの例

      datetime1 および timestamp1 列の日付値の分コンポーネントを取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, 
             MINUTE(datetime1) AS datetime1_minute, 
             timestamp1, 
             MINUTE(timestamp1) AS timestamp1_minute 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +---------------------+------------------+-------------------------------+-------------------+
      | datetime1           | datetime1_minute | timestamp1                    | timestamp1_minute |
      +---------------------+------------------+-------------------------------+-------------------+
      | 2021-11-29 00:01:00 | 1                | 2021-01-11 00:00:00.123456789 | 0                 |
      | 2021-11-28 00:02:00 | 2                | 2021-02-11 00:00:00.123456789 | 0                 |
      | 2021-11-27 00:03:00 | 3                | 2021-03-11 00:00:00.123456789 | 0                 |
      | 2021-11-26 00:04:00 | 4                | 2021-04-11 00:00:00.123456789 | 0                 |
      | 2021-11-25 00:05:00 | 5                | 2021-05-11 00:00:00.123456789 | 0                 |
      | 2021-11-24 00:06:00 | 6                | 2021-06-11 00:00:00.123456789 | 0                 |
      | 2021-11-23 00:07:00 | 7                | 2021-07-11 00:00:00.123456789 | 0                 |
      | 2021-11-22 00:08:00 | 8                | 2021-08-11 00:00:00.123456789 | 0                 |
      | 2021-11-21 00:09:00 | 9                | 2021-09-11 00:00:00.123456789 | 0                 |
      | 2021-11-20 00:10:00 | 10               | 2021-10-11 00:00:00.123456789 | 0                 |
      +---------------------+------------------+-------------------------------+-------------------+

MONTH

  • 構文

    INT MONTH(DATETIME|TIMESTAMP|DATE|STRING <date>) 
  • 説明

    日付値が属する月を返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss:ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、DATE、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 9 です。  
      SELECT MONTH('2014-09-01');
      
      -- 戻り値は NULL です。 
      SELECT MONTH('20140901');
      
      -- 戻り値は NULL です。 
      SELECT MONTH(null);
    • テーブルデータの例

      date1、datetime1、timestamp1、date3 列の各日付値の月コンポーネントを取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。  
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             MONTH(date1) AS date1_month, 
             datetime1, 
             MONTH(datetime1) AS datetime1_month, 
             timestamp1, 
             MONTH(timestamp1) AS timestamp1_month, 
             date3, 
             MONTH(date3) AS date3_month 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+
      | date1      | date1_month | datetime1           | datetime1_month | timestamp1                    | timestamp1_month | date3      | date3_month |
      +------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+
      | 2021-11-29 | 11          | 2021-11-29 00:01:00 | 11              | 2021-01-11 00:00:00.123456789 | 1                | 2021-11-20 | 11          |
      | 2021-11-28 | 11          | 2021-11-28 00:02:00 | 11              | 2021-02-11 00:00:00.123456789 | 2                | 2021-11-21 | 11          |
      | 2021-11-27 | 11          | 2021-11-27 00:03:00 | 11              | 2021-03-11 00:00:00.123456789 | 3                | 2021-11-22 | 11          |
      | 2021-11-26 | 11          | 2021-11-26 00:04:00 | 11              | 2021-04-11 00:00:00.123456789 | 4                | 2021-11-23 | 11          |
      | 2021-11-25 | 11          | 2021-11-25 00:05:00 | 11              | 2021-05-11 00:00:00.123456789 | 5                | 2021-11-24 | 11          |
      | 2021-11-24 | 11          | 2021-11-24 00:06:00 | 11              | 2021-06-11 00:00:00.123456789 | 6                | 2021-11-25 | 11          |
      | 2021-11-23 | 11          | 2021-11-23 00:07:00 | 11              | 2021-07-11 00:00:00.123456789 | 7                | 2021-11-26 | 11          |
      | 2021-11-22 | 11          | 2021-11-22 00:08:00 | 11              | 2021-08-11 00:00:00.123456789 | 8                | 2021-11-27 | 11          |
      | 2021-11-21 | 11          | 2021-11-21 00:09:00 | 11              | 2021-09-11 00:00:00.123456789 | 9                | 2021-11-28 | 11          |
      | 2021-11-20 | 11          | 2021-11-20 00:10:00 | 11              | 2021-10-11 00:00:00.123456789 | 10               | 2021-11-29 | 11          |
      +------------+-------------+---------------------+-----------------+-------------------------------+------------------+------------+-------------+

MONTHS_BETWEEN

  • 構文

    DOUBLE MONTHS_BETWEEN(DATETIME|TIMESTAMP|DATE|STRING <date1>, DATETIME|TIMESTAMP|DATE|STRING <date2>) 
  • 説明

    date1date2 の間の月数を返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date1date2:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ssyyyy-mm-dd hh:mi:ss.ff3 形式です。 入力値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    DOUBLE 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date1date2 より後の場合、正の値が返されます。 date2date1 より後の場合、負の値が返されます。

    • date1date2 が 2 つの月の最終日に対応する場合、戻り値は月数を表す整数です。 それ以外の場合、戻り値は次の数式を使用して計算されます:(date1 - date2)/31。

    • date1 または date2 の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 3.9495967741935485 です。  
      SELECT MONTHS_BETWEEN('1997-02-28 10:30:00', '1996-10-30');
      
      -- 戻り値は -3.9495967741935485 です。 
      SELECT MONTHS_BETWEEN('1996-10-30','1997-02-28 10:30:00' );
      
      -- 戻り値は -3.0 です。 
      SELECT MONTHS_BETWEEN('1996-09-30','1996-12-31');
      
      -- 戻り値は NULL です。 
      SELECT MONTHS_BETWEEN('1996-09-30', null);
    • テーブルデータの例

      timestamp1 と timestamp2 列の日付値の間の月数を計算します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true; 
      SELECT timestamp1, timestamp2, MONTHS_BETWEEN(timestamp1, timestamp2) FROM mf_date_fun_t;

      次の結果が返されます。

      +-------------------------------+-------------------------------+------------+
      | timestamp1                    | timestamp2                    | _c2        |
      +-------------------------------+-------------------------------+------------+
      | 2021-01-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -9.0       |
      | 2021-02-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -8.0       |
      | 2021-03-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -7.0       |
      | 2021-04-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -6.0       |
      | 2021-05-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -5.0       |
      | 2021-06-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -4.0       |
      | 2021-07-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -3.0       |
      | 2021-08-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -2.0       |
      | 2021-09-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | -1.0       |
      | 2021-10-11 00:00:00.123456789 | 2021-10-11 00:00:00.123456789 | 0.0        |
      +------------+------------+------------+

NEXT_DAY

  • 構文

    STRING NEXT_DAY(TIMESTAMP|DATE|DATETIME|STRING <startdate>, STRING <week>)
  • 説明

    startdate より後で、week の値に一致する最初の日の日付を返します。 次の週の指定された日の日付が返されます。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    パラメーター

    必須

    説明

    startdate

    はい

    DATE、DATETIME、TIMESTAMP、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss.ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

    week

    はい

    STRING 型の値。 このパラメーターの値は、曜日の最初の 2 文字または 3 文字、または曜日のフルネーム (MO、TUE、FRIDAY など) にすることができます。

  • 戻り値

    STRING 型の値が返されます。 戻り値は yyyy-mm-dd 形式です。 戻り値は、次のルールに基づいて変化します。

    • date の値が TIMESTAMP、DATE、DATETIME、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、エラーが返されます。

    • week の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 2017-08-08 です。  
      SELECT NEXT_DAY('2017-08-01','TU');
      
      -- 戻り値は 2017-08-08 です。 
      SELECT NEXT_DAY('2017-08-01 23:34:00', 'TU');
      
      -- 戻り値は NULL です。 
      SELECT NEXT_DAY('20170801','TU');
      
      -- 戻り値は NULL です。 
      SELECT NEXT_DAY('2017-08-01 23:34:00', null);
    • テーブルデータの例

      date1、datetime1、timestamp1、date3 列の各日付値に対応する次の週の日の日付を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。  
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             NEXT_DAY(date1,'MON') AS date1_next_day, 
             datetime1, 
             NEXT_DAY(datetime1,'TUE') AS datetime1_next_day, 
             timestamp1, 
             NEXT_DAY(timestamp1,'WED') AS timestamp1_next_day, 
             date3, 
             NEXT_DAY(date3,'THU') AS date3_next_day 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+
      | date1      | date1_next_day | datetime1           | datetime1_next_day | timestamp1                    | timestamp1_next_day | date3      | date3_next_day |
      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+
      | 2021-11-29 | 2021-12-06     | 2021-11-29 00:01:00 | 2021-11-30         | 2021-01-11 00:00:00.123456789 | 2021-01-13          | 2021-11-20 | 2021-11-25     |
      | 2021-11-28 | 2021-11-29     | 2021-11-28 00:02:00 | 2021-11-30         | 2021-02-11 00:00:00.123456789 | 2021-02-17          | 2021-11-21 | 2021-11-25     |
      | 2021-11-27 | 2021-11-29     | 2021-11-27 00:03:00 | 2021-11-30         | 2021-03-11 00:00:00.123456789 | 2021-03-17          | 2021-11-22 | 2021-11-25     |
      | 2021-11-26 | 2021-11-29     | 2021-11-26 00:04:00 | 2021-11-30         | 2021-04-11 00:00:00.123456789 | 2021-04-14          | 2021-11-23 | 2021-11-25     |
      | 2021-11-25 | 2021-11-29     | 2021-11-25 00:05:00 | 2021-11-30         | 2021-05-11 00:00:00.123456789 | 2021-05-12          | 2021-11-24 | 2021-11-25     |
      | 2021-11-24 | 2021-11-29     | 2021-11-24 00:06:00 | 2021-11-30         | 2021-06-11 00:00:00.123456789 | 2021-06-16          | 2021-11-25 | 2021-12-02     |
      | 2021-11-23 | 2021-11-29     | 2021-11-23 00:07:00 | 2021-11-30         | 2021-07-11 00:00:00.123456789 | 2021-07-14          | 2021-11-26 | 2021-12-02     |
      | 2021-11-22 | 2021-11-29     | 2021-11-22 00:08:00 | 2021-11-23         | 2021-08-11 00:00:00.123456789 | 2021-08-18          | 2021-11-27 | 2021-12-02     |
      | 2021-11-21 | 2021-11-22     | 2021-11-21 00:09:00 | 2021-11-23         | 2021-09-11 00:00:00.123456789 | 2021-09-15          | 2021-11-28 | 2021-12-02     |
      | 2021-11-20 | 2021-11-22     | 2021-11-20 00:10:00 | 2021-11-23         | 2021-10-11 00:00:00.123456789 | 2021-10-13          | 2021-11-29 | 2021-12-02     |
      +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+

NOW

  • 構文

    DATETIME NOW()
  • 説明

    現在のシステムの日付と時刻を返します。

  • 戻り値

    DATETIME 型の値が返されます。 戻り値は yyyy-mm-dd hh:mi:ss.SSS 形式です。

    • 形式が指定されていません。 返される値のミリ秒部分は 1、2、または 3 ビットを含む場合があります。

      SELECT NOW(); 

      次の結果が返されます。

      +------+
      | _c0  |
      +------+
      | 2023-06-13 10:53:24.967 |
      +------+
    • 時刻形式が指定されています。

      SELECT  DATE_FORMAT(NOW(),'yyyy-MM-dd hh:mi:ss.SSS'); 

      次の結果が返されます。

      +-----+
      | _c0 |
      +-----+
      | 2023-06-13 10:53:53.899 |
      +-----+

QUARTER

  • 構文

    INT QUARTER(DATETIME|TIMESTAMP|DATE|STRING <date>) 
  • 説明

    日付値が属する四半期を返します。 有効値:1 から 4。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss:ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、DATE、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 4 です。  
      SELECT QUARTER('1970-11-12 10:00:00');
      
      -- 戻り値は 4 です。 
      SELECT QUARTER('1970-11-12');
      
      -- 戻り値は NULL です。 
      SELECT QUARTER(null);
    • テーブルデータの例

      date1、datetime1、timestamp1、date3 列の各日付値が属する四半期を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。  
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             QUARTER(date1) AS date1_quarter, 
             datetime1, 
             QUARTER(datetime1) AS datetime1_quarter, 
             timestamp1, 
             QUARTER(timestamp1) AS timestamp1_quarter, 
             date3, 
             QUARTER(date3) AS date3_quarter 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
      | date1      | date1_quarter | datetime1           | datetime1_quarter | timestamp1                    | timestamp1_quarter | date3      | date3_quarter |
      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
      | 2021-11-29 | 4             | 2021-11-29 00:01:00 | 4                 | 2021-01-11 00:00:00.123456789 | 1                  | 2021-11-20 | 4             |
      | 2021-11-28 | 4             | 2021-11-28 00:02:00 | 4                 | 2021-02-11 00:00:00.123456789 | 1                  | 2021-11-21 | 4             |
      | 2021-11-27 | 4             | 2021-11-27 00:03:00 | 4                 | 2021-03-11 00:00:00.123456789 | 1                  | 2021-11-22 | 4             |
      | 2021-11-26 | 4             | 2021-11-26 00:04:00 | 4                 | 2021-04-11 00:00:00.123456789 | 2                  | 2021-11-23 | 4             |
      | 2021-11-25 | 4             | 2021-11-25 00:05:00 | 4                 | 2021-05-11 00:00:00.123456789 | 2                  | 2021-11-24 | 4             |
      | 2021-11-24 | 4             | 2021-11-24 00:06:00 | 4                 | 2021-06-11 00:00:00.123456789 | 2                  | 2021-11-25 | 4             |
      | 2021-11-23 | 4             | 2021-11-23 00:07:00 | 4                 | 2021-07-11 00:00:00.123456789 | 3                  | 2021-11-26 | 4             |
      | 2021-11-22 | 4             | 2021-11-22 00:08:00 | 4                 | 2021-08-11 00:00:00.123456789 | 3                  | 2021-11-27 | 4             |
      | 2021-11-21 | 4             | 2021-11-21 00:09:00 | 4                 | 2021-09-11 00:00:00.123456789 | 3                  | 2021-11-28 | 4             |
      | 2021-11-20 | 4             | 2021-11-20 00:10:00 | 4                 | 2021-10-11 00:00:00.123456789 | 4                  | 2021-11-29 | 4             |
      +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+

SECOND

  • 構文

    INT SECOND(DATETIME|TIMESTAMP|STRING <date>)
  • 説明

    日付値の秒コンポーネントを返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、または STRING 型の日付値。 日付値は yyyy-mm-dd hh:mi:ss または yyyy-mm-dd hh:mi:ss.ff3 形式です。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 45 です。  
      SELECT SECOND('2014-09-01 12:30:45');
      
      -- 戻り値は 45 です。 
      SELECT SECOND('12:30:45');
      
      -- 戻り値は NULL です。 
      SELECT SECOND('20140901123045');
      
      -- 戻り値は NULL です。 
      SELECT SECOND(null);
    • テーブルデータの例

      datetime1 および timestamp1 列の日付値の秒コンポーネントを取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。  
      SET odps.sql.type.system.odps2=true;
      SELECT datetime1, 
             SECOND(datetime1) AS datetime1_second, 
             timestamp1, 
             SECOND(timestamp1) AS timestamp1_second 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +---------------------+------------------+-------------------------------+-------------------+
      | datetime1           | datetime1_second | timestamp1                    | timestamp1_second |
      +---------------------+------------------+-------------------------------+-------------------+
      | 2021-11-29 00:01:00 | 0                | 2021-01-11 00:00:00.123456789 | 0                 |
      | 2021-11-28 00:02:00 | 0                | 2021-02-11 00:00:00.123456789 | 0                 |
      | 2021-11-27 00:03:00 | 0                | 2021-03-11 00:00:00.123456789 | 0                 |
      | 2021-11-26 00:04:00 | 0                | 2021-04-11 00:00:00.123456789 | 0                 |
      | 2021-11-25 00:05:00 | 0                | 2021-05-11 00:00:00.123456789 | 0                 |
      | 2021-11-24 00:06:00 | 0                | 2021-06-11 00:00:00.123456789 | 0                 |
      | 2021-11-23 00:07:00 | 0                | 2021-07-11 00:00:00.123456789 | 0                 |
      | 2021-11-22 00:08:00 | 0                | 2021-08-11 00:00:00.123456789 | 0                 |
      | 2021-11-21 00:09:00 | 0                | 2021-09-11 00:00:00.123456789 | 0                 |
      | 2021-11-20 00:10:00 | 0                | 2021-10-11 00:00:00.123456789 | 0                 |
      +---------------------+------------------+-------------------------------+-------------------+

TO_CHAR

  • 構文

    STRING TO_CHAR(DATETIME <date>, STRING <format>) 
  • 説明

    DATETIME 型の date 値を指定された format の文字列に変換します。

  • パラメーター

    パラメーター

    必須

    説明

    date

    はい

    DATETIME 型の日付値。 日付値は yyyy-mm-dd hh:mi:ss 形式です。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。

    format

    はい

    STRING 型の定数。 format の値では、日付形式部分が関連データに置き換えられ、他の文字は出力で変更されません。

  • 戻り値

    STRING 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME または STRING 型でない場合、エラーが返されます。

    • date の値が null の場合、エラーが返されます。

    • format の値が null の場合、null が返されます。

    • 静的データの例

      • 例 1

        --MaxCompute クライアントが Windows で実行されている場合、返される結果に中国語の文字が正しく表示されないことがあります。 
        SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00','Alibaba Finance yyyy-mm*dd');

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | Alibaba Finance 2010-12*03 |
        +------------+
      • 例 2

        SELECT TO_CHAR(DATETIME '2008-07-18 00:00:00','yyyymmdd'); 

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | 20080718   |
        +------------+
      • 例 3

        SET odps.sql.type.system.odps2=false; 
        SELECT TO_CHAR('2008-07-18 00:00:00', 'yyyymmdd');

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | 20080718   |
        +------------+
      • 例 4

        -- 'Alibaba 2010-12*3' は標準の日付値に変換できず、エラーが返されます。  
        SELECT TO_CHAR(DATETIME 'Alibaba 2010-12*3', 'Alibaba yyyy-mm*dd');
      • 例 5

        --'20102401' は標準の日付値ではなく、エラーが返されます。  
        SELECT TO_CHAR(DATETIME '20102401', 'yyyy');
      • 例 6

        SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00', null); 

        次の結果が返されます。

        +------------+
        | _c0        |
        +------------+
        | NULL       |
        +------------+
    • テーブルデータの例

      datetime1 列の日付値を指定された形式の文字列に変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      SELECT  datetime1, TO_CHAR(datetime1,'yyyy-mm-dd') AS datetime1_to_char
      FROM mf_date_fun_t; 

      次の結果が返されます。

      +---------------------+-------------------+
      | datetime1           | datetime1_to_char |
      +---------------------+-------------------+
      | 2021-11-29 00:01:00 | 2021-11-29        |
      | 2021-11-28 00:02:00 | 2021-11-28        |
      | 2021-11-27 00:03:00 | 2021-11-27        |
      | 2021-11-26 00:04:00 | 2021-11-26        |
      | 2021-11-25 00:05:00 | 2021-11-25        |
      | 2021-11-24 00:06:00 | 2021-11-24        |
      | 2021-11-23 00:07:00 | 2021-11-23        |
      | 2021-11-22 00:08:00 | 2021-11-22        |
      | 2021-11-21 00:09:00 | 2021-11-21        |
      | 2021-11-20 00:10:00 | 2021-11-20        |
      +---------------------+-------------------+

TO_DATE

  • 構文

    DATETIME|DATE TO_DATE(STRING <date>[, STRING <format>])
  • 説明

    文字列を指定された formatdate 値に変換します。

  • パラメーター

    パラメーター

    必須

    説明

    date

    はい

    STRING 型の日付値。 このパラメーターは、変換する日付文字列を指定します。 入力値が BIGINT、DOUBLE、DECIMAL、または DATETIME データ型の場合、値は計算前に暗黙的に STRING 型の値に変換されます。 日付文字列は ISO 8601 形式にすることもできます。

    format

    いいえ

    • STRING 型の定数です。このパラメーターは日付形式を指定します。format は EDTF をサポートしていません。解析中、他の文字は無効な文字として省略されます。

    • 値には yyyy を含める必要があります。含まれていない場合、NULL が返されます。format に冗長なフォーマット文字列が存在する場合、この関数は最初のフォーマット文字列に対応する日付文字列を日付値に変換します。残りの文字列はデリミタと見なされます。たとえば、TO_DATE("1234-2234", "yyyy-yyyy")1234-01-01 00:00:00 を返します。

    • yyyy は 4 桁の年を示します。mm は 2 桁の月を示します。dd は 2 桁の日を示します。hh は 24 時間形式の時を示します。mi は 2 桁の分を示します。ss は 2 桁の秒を示します。ff3 は 3 桁のミリ秒を示します。

  • 戻り値

    DATE または DATETIME 型の値が返されます。

    • format パラメーターが入力パラメーターに含まれておらず、変換する必要がある文字列が yyyy-mm-dd または yyyy-mm-dd hh:mi:ss 形式の場合、yyyy-mm-dd 形式の DATE 型の値が返されます。 format パラメーターが入力パラメーターに含まれておらず、変換する必要がある文字列が yyyy-mm-dd または yyyy-mm-dd hh:mi:ss 形式でない場合、null が返されます。

    • format パラメーターが入力パラメーターに含まれている場合、yyyy-mm-dd hh:mi:ss 形式の DATETIME 型の値が返されます。 date または format の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 2010-12-03 00:00:00 です。  
      SELECT TO_DATE('Alibaba 2010-12*03', 'Alibaba yyyy-mm*dd');
      
      -- 戻り値は 2008-07-18 00:00:00 です。 
      SELECT TO_DATE('20080718', 'yyyymmdd');
      
      -- 戻り値は 2008-07-18 20:30:00 です。 
      SELECT TO_DATE('200807182030','yyyymmddhhmi');
      
      -- '2008718' は標準の日付値に変換できず、エラーが返されます。 値は '20080718' と記述する必要があります。 
      SELECT TO_DATE('2008718', 'yyyymmdd');
      
      -- 'Alibaba 2010-12*3' は標準の日付値に変換できず、エラーが返されます。 値は 'Alibaba 2010-12*03' と記述する必要があります。 
      SELECT TO_DATE('Alibaba 2010-12*3', 'Alibaba yyyy-mm*dd');
      
      -- '2010-24-01' は標準の日付値に変換できず、エラーが返されます。 値は '2010-01-24' と記述する必要があります。 
      SELECT TO_DATE('2010-24-01', 'yyyy-mm-dd');
      
      -- 戻り値は 2018-10-30 15:13:12 です。 
      SELECT TO_DATE('20181030 15-13-12.345','yyyymmdd hh-mi-ss.ff3');
      
      -- 戻り値は NULL です。 
      SELECT TO_DATE(null,'yyyymmdd hh-mi-ss.ff3');
      
      -- 戻り値は NULL です。 
      SELECT TO_DATE('20181030 15-13-12.345', null);
      
      -- 入力値が ISO 8601 形式の場合、戻り値は 2021-09-24 13:39:34 です。 
      SELECT TO_DATE('2021-09-24T13:39:34.119Z', 'yyyy-MM-ddThh:mi:ss.ff3Z');
      
      -- 戻り値は 2021-09-24 で、データ型は DATE です。 
      SELECT TO_DATE('2021-09-24');
      
      -- 戻り値は 2021-09-24 で、データ型は DATE です。 
      SELECT TO_DATE('2021-09-24 13:39:34');
      
      -- 戻り値は NULL です。 
      SELECT TO_DATE('20210924');
    • テーブルデータの例

      date3 列の日付値を指定された形式の日付値に変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      SELECT date3, TO_DATE(date3, 'yyyy-mm-dd') AS date3_to_date FROM mf_date_fun_t; 

      次の結果が返されます。

      +------------+---------------------+
      | date3      | date3_to_date       |
      +------------+---------------------+
      | 2021-11-20 | 2021-11-20 00:00:00 |
      | 2021-11-21 | 2021-11-21 00:00:00 |
      | 2021-11-22 | 2021-11-22 00:00:00 |
      | 2021-11-23 | 2021-11-23 00:00:00 |
      | 2021-11-24 | 2021-11-24 00:00:00 |
      | 2021-11-25 | 2021-11-25 00:00:00 |
      | 2021-11-26 | 2021-11-26 00:00:00 |
      | 2021-11-27 | 2021-11-27 00:00:00 |
      | 2021-11-28 | 2021-11-28 00:00:00 |
      | 2021-11-29 | 2021-11-29 00:00:00 |
      +------------+---------------------+

TO_MILLIS

  • 構文

    BIGINT TO_MILLIS(DATETIME|TIMESTAMP <date>);
  • 説明

    date 値をミリ秒単位で正確な UNIX タイムスタンプに変換します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME または TIMESTAMP 型の日付値。 日付値は yyyy-mm-dd hh:mi:ss または yyyy-mm-dd hh:mi:ss.ff3 形式です。

  • 戻り値

    BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME または TIMESTAMP 型でない場合、エラーが返されます。

    • date の値が null の場合、エラーが返されます。

    • 静的データの例

      -- 戻り値は 1617174900000 です。  
      SELECT TO_MILLIS(datetime '2021-03-31 15:15:00');
      
      -- 戻り値は 1617174900000 です。 
      SET odps.sql.type.system.odps2=true;
      SELECT TO_MILLIS(timestamp '2021-03-31 15:15:00');
    • テーブルデータの例

      datetime1 および timestamp1 列の日付値をミリ秒単位で正確な UNIX タイムスタンプに変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true; 
      SELECT datetime1, 
             TO_MILLIS(datetime1) AS datetime1_to_millis, 
             timestamp1, 
             TO_MILLIS(timestamp1) AS timestamp1_to_millis 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +---------------------+---------------------+-------------------------------+----------------------+
      | datetime1           | datetime1_to_millis | timestamp1                    | timestamp1_to_millis |
      +---------------------+---------------------+-------------------------------+----------------------+
      | 2021-11-29 00:01:00 | 1638115260000       | 2021-01-11 00:00:00.123456789 | 1610294400123        |
      | 2021-11-28 00:02:00 | 1638028920000       | 2021-02-11 00:00:00.123456789 | 1612972800123        |
      | 2021-11-27 00:03:00 | 1637942580000       | 2021-03-11 00:00:00.123456789 | 1615392000123        |
      | 2021-11-26 00:04:00 | 1637856240000       | 2021-04-11 00:00:00.123456789 | 1618070400123        |
      | 2021-11-25 00:05:00 | 1637769900000       | 2021-05-11 00:00:00.123456789 | 1620662400123        |
      | 2021-11-24 00:06:00 | 1637683560000       | 2021-06-11 00:00:00.123456789 | 1623340800123        |
      | 2021-11-23 00:07:00 | 1637597220000       | 2021-07-11 00:00:00.123456789 | 1625932800123        |
      | 2021-11-22 00:08:00 | 1637510880000       | 2021-08-11 00:00:00.123456789 | 1628611200123        |
      | 2021-11-21 00:09:00 | 1637424540000       | 2021-09-11 00:00:00.123456789 | 1631289600123        |
      | 2021-11-20 00:10:00 | 1637338200000       | 2021-10-11 00:00:00.123456789 | 1633881600123        |
      +---------------------+---------------------+-------------------------------+----------------------+

TRUNC_TIME

  • コマンド形式

    string TRUNC_TIME(date|datetime|timestamp|timestamp_ntz <date>, string <datepart>)
  • 説明

    datepart で指定された時間単位に従って日付または時刻型のデータを切り捨て、STRING 型のデータを返します。

  • パラメーター

    • date:必須。 DATE、DATETIME、TIMESTAMP、または TIMESTAMP_NTZ 型をサポートします。 入力が STRING 型で、MaxCompute プロジェクトのデータ型バージョンが 1.0 の場合、計算前に暗黙的に DATETIME 型に変換されます。

    • datepart:必須。 STRING 型の定数で、大文字と小文字を区別せず、yearmonthday、および hour をサポートします。

  • 戻り値

    STRING 型を返します。

    STRING 形式は次のとおりです。

    • datepart が 'year' の場合:STRING 形式 yyyy を返します。

    • datepart が 'month' の場合:STRING 形式 yyyy-mm を返します。

    • datepart が 'day' の場合:STRING 形式 yyyy-mm-dd を返します。

    • datepart が 'hour' の場合:STRING 形式 yyyy-mm-dd hh:mm:ss を返します。

    返却ルール:

    • date が DATE、DATETIME、TIMESTAMP、または TIMESTAMP_NTZ 型でない場合、エラーが返されます。 date の STRING 型は、MaxCompute プロジェクトのデータ型バージョンが 1.0 の場合にのみサポートされます。

    • datepart が NULL の場合、エラーが返されます。

    • 時刻が DATETIME 型の場合

      たとえば、現在のセッションまたはプロジェクトのタイムゾーンが UTC+8 の場合、ローカル時刻は datetime '2025-06-03 07:15:08' で、TRUNC_TIME 関数はまずローカル時刻を UTC 時刻 '2025-06-02 23:15:08' に変換し、次に datepart に従って切り捨て、結果を STRING 型として返します。

      SET odps.sql.timezone=Asia/Shanghai;
      SELECT 
             TRUNC_TIME(datetime '2025-06-03 07:15:08','year') as tc_year,
             TRUNC_TIME(datetime '2025-06-03 07:15:08','month') as tc_month,
             TRUNC_TIME(datetime '2025-06-03 07:15:08','day') as tc_date,
             TRUNC_TIME(datetime '2025-06-03 07:15:08','hour') as tc_hour;

      次の結果が返されます。

      +------------+------------+------------+------------+
      | tc_year    | tc_month   | tc_date    | tc_hour    |
      +------------+------------+------------+------------+
      | 2025       | 2025-06    | 2025-06-02 | 2025-06-02 23:00:00 |
      +------------+------------+------------+------------+
    • 時刻が DATE 型の場合

      たとえば、入力時刻が date '2025-06-10' の場合、TRUNC_TIME 関数は datepart で指定された時間単位に従って DATE 型のデータを切り捨て、STRING 型を返します。

      SELECT 
             TRUNC_TIME(date '2025-06-10','year' ),
             TRUNC_TIME(date '2025-06-10','month' ),
             TRUNC_TIME(date '2025-06-10','day' );

      次の結果が返されます。

      +------------+------------+------------+
      | _c0        | _c1        | _c2        |
      +------------+------------+------------+
      | 2025       | 2025-06    | 2025-06-10 |
      +------------+------------+------------+
    • 時刻が STRING 型の場合

      たとえば、入力時刻が STRING 型の '2025-06-03 15:30:30' の場合、計算前に暗黙的に DATETIME 型に変換されるように、MaxCompute プロジェクトのデータ型バージョンを 1.0 に設定する必要があります。 そうしないと、エラーが返されます。

      SET odps.sql.type.system.odps2=false;
      SELECT TRUNC_TIME('2025-06-03 15:30:30','hour');

      次の結果が返されます。

      +------------+
      | _c0        |
      +------------+
      | 2025-06-03 07:00:00 |
      +------------+

UNIX_TIMESTAMP

  • 構文

    BIGINT UNIX_TIMESTAMP(DATETIME|DATE|TIMESTAMP|STRING <date>) 
  • 説明

    date 値を整数である UNIX タイムスタンプに変換します。

  • パラメーター

    date:必須。 DATETIME、DATE、TIMESTAMP、または STRING 型の日付値。 入力値は yyyy-mm-dd hh:mi:ssyyyy-mm-dd、または yyyy-mm-dd hh:mi:ss.ff3 形式です。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型の値に変換されます。 MaxCompute V1.0 データ型バージョンの詳細については、「データ型バージョン 1.0」をご参照ください。 MaxCompute V2.0 データ型バージョンを有効にすると、暗黙的な変換は失敗します。 この場合、CAST 関数 (例: unix_timestamp(cast(... as datetime))) を使用してデータ型を変換する必要があります。 MaxCompute V2.0 データ型バージョンを無効にすることもできます。 MaxCompute V2.0 データ型バージョンの詳細については、「データ型バージョン 2.0」をご参照ください。

    説明

    入力値が定数であり、テーブルの値ではない場合、入力値は DATETIME'yyyy-mm-dd hh:mi:ss'DATE'yyyy-mm-dd'、または TIMESTAMP'yyyy-mm-dd hh:mi:ss.ff3' 形式です。 入力値にデータ型のキーワードが含まれておらず、'yyyy-mm-dd hh:mi:ss' 形式の場合、入力値は STRING 型の値として認識されます。

  • 戻り値

    BIGINT 型の UNIX タイムスタンプが返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、DATE、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、エラーが返されるか、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 1699585860 です。 
      SELECT UNIX_TIMESTAMP(DATETIME'2023-11-10 11:11:00'); 
       
      -- 戻り値は 1699545600 です。
      SET odps.sql.type.system.odps2=true;
      SELECT UNIX_TIMESTAMP(DATE'2023-11-10');
      
      -- 戻り値は 1699585860 です。
      SET odps.sql.type.system.odps2=true;
      SELECT UNIX_TIMESTAMP(TIMESTAMP'2023-11-10 11:11:00.123456789');
      
      -- 戻り値は 1237518660 です。 
      SET odps.sql.type.system.odps2=false;
      SELECT UNIX_TIMESTAMP('2009-03-20 11:11:00'); 
      
      -- 戻り値は NULL です。 
      SELECT UNIX_TIMESTAMP(null);
    • テーブルデータの例

      date1、datetime1、timestamp1 列の日付値を整数である UNIX タイムスタンプに変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。  
      SET odps.sql.type.system.odps2=true;
      SELECT date1, 
             UNIX_TIMESTAMP(date1) AS date1_unix_timestamp, 
             datetime1, 
             UNIX_TIMESTAMP(datetime1) AS datetime1_unix_timestamp, 
             timestamp1, 
             UNIX_TIMESTAMP(timestamp1) AS timestamp1_unix_timestamp 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+
      | date1      | date1_unix_timestamp | datetime1           | datetime1_unix_timestamp | timestamp1                   | timestamp1_unix_timestamp |
      +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+
      | 2021-11-29 | 1638115200           | 2021-11-29 00:01:00 | 1638115260               | 2021-01-11 00:00:00.123456789 | 1610294400                |
      | 2021-11-28 | 1638028800           | 2021-11-28 00:02:00 | 1638028920               | 2021-02-11 00:00:00.123456789 | 1612972800                |
      | 2021-11-27 | 1637942400           | 2021-11-27 00:03:00 | 1637942580               | 2021-03-11 00:00:00.123456789 | 1615392000                |
      | 2021-11-26 | 1637856000           | 2021-11-26 00:04:00 | 1637856240               | 2021-04-11 00:00:00.123456789 | 1618070400                |
      | 2021-11-25 | 1637769600           | 2021-11-25 00:05:00 | 1637769900               | 2021-05-11 00:00:00.123456789 | 1620662400                |
      | 2021-11-24 | 1637683200           | 2021-11-24 00:06:00 | 1637683560               | 2021-06-11 00:00:00.123456789 | 1623340800                |
      | 2021-11-23 | 1637596800           | 2021-11-23 00:07:00 | 1637597220               | 2021-07-11 00:00:00.123456789 | 1625932800                |
      | 2021-11-22 | 1637510400           | 2021-11-22 00:08:00 | 1637510880               | 2021-08-11 00:00:00.123456789 | 1628611200                |
      | 2021-11-21 | 1637424000           | 2021-11-21 00:09:00 | 1637424540               | 2021-09-11 00:00:00.123456789 | 1631289600                |
      | 2021-11-20 | 1637337600           | 2021-11-20 00:10:00 | 1637338200               | 2021-10-11 00:00:00.123456789 | 1633881600                |
      +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+

WEEKDAY

  • 構文

    BIGINT WEEKDAY(DATETIME <date>)
  • 説明

    date 値が属する曜日を表す数値を返します。

  • パラメーター

    date:必須。 DATETIME 型の値。 日付値は yyyy-mm-dd hh:mi:ss 形式である必要があります。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。

  • 戻り値

    BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • 月曜日は週の最初の日と見なされ、その戻り値は 0 です。 週の日は 0 から昇順に番号が付けられます。 日曜日の戻り値は 6 です。

    • date の値が DATETIME または STRING 型でない場合、または形式が要件を満たしていない場合、エラーが返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 4 です。 
      SELECT WEEKDAY(datetime '2009-03-20 11:11:00'); 
      
      -- 戻り値は 4 です。 
      SET odps.sql.type.system.odps2=false;
      SELECT WEEKDAY('2009-03-20 11:11:00');
      
      -- 戻り値は NULL です。 
      SELECT WEEKDAY(null);
    • テーブルデータの例

      datetime1 列の各日付値が属する曜日を計算します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      SELECT datetime1, WEEKDAY(datetime1) AS datetime1_weekday FROM mf_date_fun_t; 

      次の結果が返されます。

      +---------------------+-------------------+
      | datetime1           | datetime1_weekday |
      +---------------------+-------------------+
      | 2021-11-29 00:01:00 | 0                 |
      | 2021-11-28 00:02:00 | 6                 |
      | 2021-11-27 00:03:00 | 5                 |
      | 2021-11-26 00:04:00 | 4                 |
      | 2021-11-25 00:05:00 | 3                 |
      | 2021-11-24 00:06:00 | 2                 |
      | 2021-11-23 00:07:00 | 1                 |
      | 2021-11-22 00:08:00 | 0                 |
      | 2021-11-21 00:09:00 | 6                 |
      | 2021-11-20 00:10:00 | 5                 |
      +---------------------+-------------------+

WEEKOFYEAR

  • 構文

    BIGINT WEEKOFYEAR(DATETIME <date>)
  • 説明

    日付値が属する年の週を表す数値を返します。 月曜日は週の最初の日と見なされます。

    説明

    週が現在の年に属するか、次の年に属するかを判断するには、週の 4 日以上が属する年を見つけます。 週が現在の年に属する場合、それはその年の最後の週と見なされます。 週が次の年に属する場合、それは次の年の最初の週と見なされます。

  • パラメーター

    date:必須。 DATETIME 型の値。 日付値は yyyy-mm-dd hh:mi:ss 形式である必要があります。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。

  • 戻り値

    BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 値 1 が返されます。 20141229 は 2014 年ですが、週のほとんどの日が 2015 年に属します。 したがって、戻り値 1 は 2015 年の最初の週を示します。  
      SELECT WEEKOFYEAR(TO_DATE("20141229", "yyyymmdd"));  
      
      -- 戻り値は 1 です。     
      SELECT WEEKOFYEAR(TO_DATE("20141231", "yyyymmdd")); 
      
      -- 戻り値は 53 です。  
      SELECT WEEKOFYEAR(TO_DATE("20151229", "yyyymmdd"));
      
      -- 戻り値は 48 です。 
      SET odps.sql.type.system.odps2=false;
      SELECT WEEKOFYEAR('2021-11-29 00:01:00');
      
      -- 戻り値は NULL です。 
      SELECT WEEKOFYEAR('20141231');
      
      -- 戻り値は NULL です。 
      SELECT WEEKOFYEAR(null);
    • テーブルデータの例

      datetime1 列の各日付が属する年の何週目かを計算します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      SELECT datetime1, WEEKOFYEAR(datetime1) AS datetime1_weekofyear FROM mf_date_fun_t; 

      次の結果が返されます。

      +---------------------+----------------------+
      | datetime1           | datetime1_weekofyear |
      +---------------------+----------------------+
      | 2021-11-29 00:01:00 | 48                   |
      | 2021-11-28 00:02:00 | 47                   |
      | 2021-11-27 00:03:00 | 47                   |
      | 2021-11-26 00:04:00 | 47                   |
      | 2021-11-25 00:05:00 | 47                   |
      | 2021-11-24 00:06:00 | 47                   |
      | 2021-11-23 00:07:00 | 47                   |
      | 2021-11-22 00:08:00 | 47                   |
      | 2021-11-21 00:09:00 | 46                   |
      | 2021-11-20 00:10:00 | 46                   |
      +---------------------+----------------------+

YEAR

  • 構文

    INT YEAR(DATETIME|TIMESTAMP|DATE|STRING <date>) 
  • 説明

    date 値が属する年を返します。 この関数は MaxCompute V2.0 の追加関数です。

  • パラメーター

    date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は yyyy-mm-ddyyyy-mm-dd hh:mi:ss、または yyyy-mm-dd hh:mi:ss:ff3 形式です。 値が STRING 型の場合、値には少なくとも yyyy-mm-dd 部分が含まれている必要があり、余分な文字列を含めることはできません。

  • 戻り値

    INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。

    • date の値が DATETIME、TIMESTAMP、DATE、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。

    • date の値が null の場合、null が返されます。

    • 静的データの例

      -- 戻り値は 1970 です。 
      SELECT YEAR('1970-01-01 12:30:00');
      
      -- 戻り値は 1970 です。 
      SELECT YEAR('1970-01-01'); 
      
      -- 戻り値は 70 です。 
      SELECT YEAR('70-01-01');
      
      -- 戻り値は NULL です。 
      SELECT YEAR('1970/03/09'); 
      
      -- 戻り値は NULL です。 
      SELECT YEAR(null); 
    • テーブルデータの例

      date1、datetime1、timestamp1、date3 列の各日付値が属する年を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:

      -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 
      SET odps.sql.type.system.odps2=true;
      SELECT date1,  
             YEAR(date1) AS date1_year, 
             datetime1, 
             YEAR(datetime1) AS datetime1_year, 
             timestamp1, 
             YEAR(timestamp1) AS timestamp1_year, 
             date3, 
             YEAR(date3) AS date3_year 
        FROM mf_date_fun_t;

      次の結果が返されます。

      +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+
      | date1      | date1_year | datetime1           | datetime1_year | timestamp1                    | timestamp1_year | date3      | date3_year |
      +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+
      | 2021-11-29 | 2021       | 2021-11-29 00:01:00 | 2021           | 2021-01-11 00:00:00.123456789 | 2021            | 2021-11-20 | 2021       |
      | 2021-11-28 | 2021       | 2021-11-28 00:02:00 | 2021           | 2021-02-11 00:00:00.123456789 | 2021            | 2021-11-21 | 2021       |
      | 2021-11-27 | 2021       | 2021-11-27 00:03:00 | 2021           | 2021-03-11 00:00:00.123456789 | 2021            | 2021-11-22 | 2021       |
      | 2021-11-26 | 2021       | 2021-11-26 00:04:00 | 2021           | 2021-04-11 00:00:00.123456789 | 2021            | 2021-11-23 | 2021       |
      | 2021-11-25 | 2021       | 2021-11-25 00:05:00 | 2021           | 2021-05-11 00:00:00.123456789 | 2021            | 2021-11-24 | 2021       |
      | 2021-11-24 | 2021       | 2021-11-24 00:06:00 | 2021           | 2021-06-11 00:00:00.123456789 | 2021            | 2021-11-25 | 2021       |
      | 2021-11-23 | 2021       | 2021-11-23 00:07:00 | 2021           | 2021-07-11 00:00:00.123456789 | 2021            | 2021-11-26 | 2021       |
      | 2021-11-22 | 2021       | 2021-11-22 00:08:00 | 2021           | 2021-08-11 00:00:00.123456789 | 2021            | 2021-11-27 | 2021       |
      | 2021-11-21 | 2021       | 2021-11-21 00:09:00 | 2021           | 2021-09-11 00:00:00.123456789 | 2021            | 2021-11-28 | 2021       |
      | 2021-11-20 | 2021       | 2021-11-20 00:10:00 | 2021           | 2021-10-11 00:00:00.123456789 | 2021            | 2021-11-29 | 2021       |
      +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+

参考資料