このトピックでは、MaxCompute でサポートされている日付関数の構文とパラメーターについて説明します。このトピックでは、日付関数の使用方法の例も示します。ビジネス要件に基づいて、日付の計算または変換を実行するために適切な日付関数を選択できます。
関数 | 説明 |
指定された日付に月数を加算した日付値を返します。 | |
現在のタイムスタンプを返します。 | |
現在のシステムのタイムゾーンを返します。 | |
delta で指定された間隔に基づいて、日付値に日数を加算または減算します。日単位の変更のみがサポートされています。DATE_ADD 関数は | |
datepart で指定された時間単位と delta で指定された間隔に基づいて日付の値を変更します。年、月、日、時、分、または秒による変更がサポートされています。 | |
日付値を指定されたフォーマットの文字列に変換します。 | |
delta で指定された間隔に基づいて、日付の値に日数を加算または減算します。DATE_SUB 関数は、 | |
datepart で指定された時間単位に基づいて、2 つの日付値の差を計算します。 | |
datepart で指定された時間単位に基づいて、日付値の指定されたコンポーネントを返します。 | |
datepart で指定された時間単位に基づいて、日付値を切り捨てます。 | |
日付値の日を返します。 | |
日付の値の日コンポーネントを返します。 | |
日付値に対応する曜日を返します。 | |
その年の通日を表す整数を返します。 | |
タイムスタンプの指定されたコンポーネントを返します。 | |
BIGINT 型の UNIX タイムスタンプを DATETIME 型の日付値に変換します。 | |
UTC タイムスタンプを、指定されたタイムゾーンのタイムスタンプに変換します。 | |
現在の日付を日付値として返します。 | |
日付値の時間部分を返します。 | |
日付文字列が、指定されたフォーマットで日付値に変換できるかどうかを判定します。 | |
日付値が属する月の最終日を返します。 | |
日付値が属する月の最終日を返します。 | |
日付値の分コンポーネントを返します。 | |
日付値が属する月を返します。 | |
指定された日付の値の間の月数を返します。 | |
日付値より後であり、指定された週に一致する最初の平日の日付を返します。 | |
現在のシステムの日付と時刻を返します。 | |
日付値が属する四半期を返します。 | |
日付値の秒を返します。 | |
日付の値を指定されたフォーマットで文字列に変換します。 | |
指定されたフォーマットで文字列を日付値に変換します。 | |
日付の値をミリ秒単位の UNIX タイムスタンプに変換します。 | |
指定された datepart 時間単位に従って日付または時刻データを切り捨て、STRING 型のデータを返します。 | |
日付値を整数の UNIX タイムスタンプに変換します。 | |
日付値が該当する曜日を表す数値を返します。 | |
日付値がその年の何週目にあたるかを表す数値を返します。 | |
日付値が属する年を返します。 |
使用上の注意
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>)説明
num_months で指定された月数を startdate に加算した後の日付値を返します。この関数は MaxCompute V2.0 の追加関数です。
パラメーター
パラメーター
必須
説明
開始日
はい
DATE、DATETIME、TIMESTAMP、または STRING 型の値。値は
yyyy-mm-dd、yyyy-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 列の日付値を整数である UNIX タイムスタンプに変換します。この例では、サンプルデータ のデータが使用されます。サンプル文:
-- 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>)説明
delta で指定された日数を startdate で指定された日付値に加算または減算します。
パラメーター
パラメーター
必須
説明
開始日
はい
開始日。DATE 型、DATETIME 型、または STRING 型の値がサポートされています。
入力値が STRING 型で、かつプロジェクトで MaxCompute V1.0 のデータの型エディションが使用されている場合、入力値は計算前に暗黙的に DATE 型に変換されます。STRING 型の入力値には、
'2019-12-27'のように、少なくとも'yyyy-mm-dd'の部分が含まれている必要があります。デルタ
はい
加算または減算する日数。 このパラメーターの値は 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 型、DATETIME 型、または TIMESTAMP 型の日付値。値のフォーマットが DATETIME 型のフォーマット
yyyy-mm-dd hh:mi:ss(2021-08-28 00:00:00など) に準拠し、かつ MaxCompute V1.0 データ型エディションが使用されている場合、STRING 型の値は計算前に DATETIME 型の値に暗黙的に変換されます。デルタ
はい
日付値の指定された要素に加算または減算する間隔。このパラメーターの値は BIGINT 型である必要があります。delta の値が 0 より大きい場合、間隔が日付値に加算されます。それ以外の場合、間隔は日付値から減算されます。入力値が STRING 型または DOUBLE 型の場合、計算の前に値は暗黙的に BIGINT 型の値に変換されます。
説明datepart で指定された時間単位に基づいて delta で指定された間隔を加算または減算すると、より大きい日付要素で繰り上がりまたは繰り下がりが発生する場合があります。年、月、時、分、秒の部分は、それぞれ 10 進法、12 進法、24 進法、60 進法に従って計算されます。
DATEADD 関数が日付値の月の要素に delta で指定された間隔を加算し、この操作によって日の要素にオーバーフローが発生しない場合、日の要素の値を保持します。それ以外の場合、日の要素の値を指定された月の最終日に設定します。
datepart
はい
日付値で変更する日付部分。値は STRING 型の定数です。入力値のフォーマットが無効な場合、または入力値が STRING 型の定数でない場合は、エラーが返されます。
このパラメーターの値は、STRING 型と DATETIME 型の間の変換ルールに従って指定されます。値
yyyyは、日付値の年の部分を示します。値mmは、日付値の月の部分を示します。値ddは、日付値の日の部分を示します。詳細については、「型変換」をご参照ください。-year、-month、-mon、-day、または-hourなどの拡張日時形式 (EDTF) もサポートされています。戻り値
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、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'。
フォーマット
はい
STRING 型の定数です。format は、
yyyy-MM-dd hh:mm:ss:SSSやyyyy-MM-dd hh:mi:ss:SSSなどの日付フォーマットを指定します。値は、次のコンポーネントで構成されます。YYYYまたはyyyy: 年。yyyy は暦年を表し、YYYY は週の年を表します。説明週の年は、実際の年と一致しない場合があります。週の年フォーマットを使用する場合は注意が必要です。
MM: 月。mm: 分。dd: 日。HH: 24 時間制で表される時。hh: 12 時間制で表される時。mi: 分。ss: 秒。SSS: ミリ秒。
重要Hive 互換のデータの型エディションが無効になっている場合、
HHとhhの両方が 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>)説明
delta で指定された日数を startdate で指定された日付値に加算または減算します。
パラメーター
パラメーター
必須
説明
開始日
はい
開始日。DATE 型、DATETIME 型、または STRING 型の値がサポートされています。入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型エディションが使用されている場合、入力値は計算前に暗黙的に DATE 型に変換されます。STRING 型の入力値には、
'2019-12-27'のように、少なくとも'yyyy-mm-dd'の部分を含める必要があります。デルタ
はい
加算または減算する日数。このパラメーターの値は 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>)説明
date1 と date2 の差を計算します。差は datepart で指定された時間単位で測定されます。
パラメーター
パラメーター
必須
説明
date1 と date2
はい
DATE、DATETIME、または TIMESTAMP 型の値。パラメーターは被減数と減数を指定します。入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型エディションが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。
説明MaxCompute V2.0 データ型エディションのみが TIMESTAMP 型をサポートします。詳細については、「MaxCompute データ型システムバージョン 2.0」をご参照ください。
日付部分
いいえ
STRING 型の定数である時間単位です。
MaxCompute V2.0 データ型エディションを有効にした場合、datepart を空のままにできます。 デフォルト値は day です。 MaxCompute V2.0 データ型エディションの詳細については、「データ型エディション」をご参照ください。 EDTF もサポートされています。たとえば、
-year、-month、-mon、-day、または-hourです。説明この関数は、datepart で指定された時間単位に基づいて下位の単位を省略し、結果を計算します。
戻り値
BIGINT 型の値が返されます。戻り値は次のルールに基づいて異なります。
date1 または date2 の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。
date1 が date2 より小さい場合、戻り値は負になります。
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 型、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、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-dd、yyyy-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-dd、yyyy-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-dd、yyyy-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-dd、yyyy-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 型、DATETIME 型、TIMESTAMP 型、または STRING 型の日付値。 入力値は
yyyy-mm-dd、yyyy-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となります。パラメーター
パラメーター
必須
説明
{任意のプリミティブ型}*
はい
TIMESTAMP、DATETIME、TINYINT、SMALLINT、INT、または BIGINT 型のタイムスタンプ。値が TINYINT、SMALLINT、INT、または BIGINT 型の場合、時間単位はミリ秒まで正確です。
タイムゾーン
はい
新しい時間ゾーン。
説明検索エンジンを使用して時間ゾーンリストを検索できます。
戻り値
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+8 を標準タイムゾーンとして使用します。
戻り値
現在の日付と時刻が返され、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-dd、yyyy-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>)説明
date1 と date2 の間の月数を返します。この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date1 および date2: 必須。DATETIME、TIMESTAMP、DATE、または STRING 型の値。入力値は、
yyyy-mm-dd、yyyy-mm-dd hh:mi:ss、yyyy-mm-dd hh:mi:ss.ff3フォーマットです。入力値が STRING 型の場合、値には少なくともyyyy-mm-ddの部分が含まれている必要があり、余分な文字列を含めることはできません。戻り値
DOUBLE 型の値が返されます。戻り値は、次のルールに基づいて変化します。
date1 が date2 より後の場合、正の値が返されます。date2 が date1 より後の場合、負の値が返されます。
date1 と date2 が 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-dd、yyyy-mm-dd hh:mi:ss、またはyyyy-mm-dd hh:mi:ss.ff3フォーマットです。値が STRING 型の場合、値には少なくともyyyy-mm-dd部分が含まれている必要があり、余分な文字列を含めることはできません。week
はい
STRING 型の値。このパラメーターの値は、MO、TUE、FRIDAY など、曜日の最初の 2 文字または 3 文字、あるいは曜日のフルネームにすることができます。
戻り値
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 | +-----+
四半期
構文
INT QUARTER(DATETIME|TIMESTAMP|DATE|STRING <date>)説明
日付値がどの四半期に当たるかを返します。有効な値は 1〜4 です。この関数は、MaxCompute V2.0 の追加関数です。
パラメーター
date: 必須。DATETIME、TIMESTAMP、DATE、または STRING 型の日付値です。入力値のフォーマットは、
yyyy-mm-dd、yyyy-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 | +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
2番目
構文
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 <日付>[, STRING <フォーマット>])説明
文字列を、指定されたフォーマットで日付値に変換します。
パラメーター
パラメーター
必須
説明
日付
はい
STRING 型の日付の値。このパラメーターは、変換する日付文字列を指定します。入力値が BIGINT、DOUBLE、DECIMAL、または DATETIME データ型の場合、値は計算前に暗黙的に STRING 型の値に変換されます。日付文字列は ISO 8601 フォーマットにすることもできます。
フォーマット
いいえ
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>);説明
日付値をミリ秒精度の 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 型の定数で、大文字と小文字を区別せず、
year、month、day、および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 + 08:00 の場合、ローカル時刻は 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:ss、yyyy-mm-dd、またはyyyy-mm-dd hh:mi:ss.ff3です。入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型エディションが使用されている場合、計算前に入力値は暗黙的に DATETIME 型の値に変換されます。MaxCompute V1.0 データ型エディションの詳細については、「MaxCompute V1.0 データ型エディション」をご参照ください。MaxCompute V2.0 データ型エディションを有効にすると、暗黙的な変換は失敗します。この場合、CAST関数 (例:unix_timestamp(cast(... as datetime))) を使用してデータ型を変換する必要があります。MaxCompute V2.0 データ型エディションを無効にすることもできます。MaxCompute V2.0 データ型エディションの詳細については、「MaxCompute データ型システムバージョン 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 | +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+
平日
構文
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-dd、yyyy-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 | +------------+------------+---------------------+----------------+-------------------------------+-----------------+------------+------------+
参考資料
前述のビルトイン関数がビジネス要件を満たさない場合、MaxCompute はユーザー定義関数 (UDF) もサポートしています。 UDF の詳細については、「概要」をご参照ください。
MaxCompute SQL に関するよくある質問の詳細については、次の Topic をご参照ください。
MaxCompute のビルトイン関数に関する一般的なエラーとよくある質問の詳細については、次の Topic をご参照ください。