本トピックでは、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>)説明
startdate に num_months で指定された月数を加算した後の日付値を返します。 この関数は 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部分が含まれている必要があり、余分な文字列を含めることはできません。num_months
はい
INT 型の値。
戻り値
STRING 型の値が返されます。 戻り値は
yyyy-mm-dd形式です。 戻り値は、次のルールに基づいて変化します。startdate の値が DATE、DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。
startdate の値が null の場合、エラーが返されます。
num_months の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 2017-05-14 です。 SELECT ADD_MONTHS('2017-02-14',3); -- 戻り値は 0017-05-14 です。 SELECT ADD_MONTHS('17-2-14',3); -- 戻り値は 2017-05-14 です。 SELECT ADD_MONTHS('2017-02-14 21:30:00',3); -- 戻り値は NULL です。 SELECT ADD_MONTHS('20170214',3); -- 戻り値は NULL です。 SELECT ADD_MONTHS('2017-02-14 21:30:00',null);テーブルデータの例
date1、datetime1、timestamp1、date3 列の日付に指定された月数を加算します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, ADD_MONTHS(date1,1) AS date1_add_months, datetime1, ADD_MONTHS(datetime1, 2) AS datetime1_add_months, timestamp1, ADD_MONTHS(timestamp1,3) AS timestamp1_add_months, date3, ADD_MONTHS(date3,4) AS date3_add_months FROM mf_date_fun_t;次の結果が返されます。
+------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+ | date1 | date1_add_months | datetime1 | datetime1_add_months | timestamp1 | timestamp1_add_months | date3 | date3_add_months | +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+ | 2021-11-29 | 2021-12-29 | 2021-11-29 00:01:00 | 2022-01-29 | 2021-01-11 00:00:00.123456789 | 2021-04-11 | 2021-11-20 | 2022-03-20 | | 2021-11-28 | 2021-12-28 | 2021-11-28 00:02:00 | 2022-01-28 | 2021-02-11 00:00:00.123456789 | 2021-05-11 | 2021-11-21 | 2022-03-21 | | 2021-11-27 | 2021-12-27 | 2021-11-27 00:03:00 | 2022-01-27 | 2021-03-11 00:00:00.123456789 | 2021-06-11 | 2021-11-22 | 2022-03-22 | | 2021-11-26 | 2021-12-26 | 2021-11-26 00:04:00 | 2022-01-26 | 2021-04-11 00:00:00.123456789 | 2021-07-11 | 2021-11-23 | 2022-03-23 | | 2021-11-25 | 2021-12-25 | 2021-11-25 00:05:00 | 2022-01-25 | 2021-05-11 00:00:00.123456789 | 2021-08-11 | 2021-11-24 | 2022-03-24 | | 2021-11-24 | 2021-12-24 | 2021-11-24 00:06:00 | 2022-01-24 | 2021-06-11 00:00:00.123456789 | 2021-09-11 | 2021-11-25 | 2022-03-25 | | 2021-11-23 | 2021-12-23 | 2021-11-23 00:07:00 | 2022-01-23 | 2021-07-11 00:00:00.123456789 | 2021-10-11 | 2021-11-26 | 2022-03-26 | | 2021-11-22 | 2021-12-22 | 2021-11-22 00:08:00 | 2022-01-22 | 2021-08-11 00:00:00.123456789 | 2021-11-11 | 2021-11-27 | 2022-03-27 | | 2021-11-21 | 2021-12-21 | 2021-11-21 00:09:00 | 2022-01-21 | 2021-09-11 00:00:00.123456789 | 2021-12-11 | 2021-11-28 | 2022-03-28 | | 2021-11-20 | 2021-12-20 | 2021-11-20 00:10:00 | 2022-01-20 | 2021-10-11 00:00:00.123456789 | 2022-01-11 | 2021-11-29 | 2022-03-29 | +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
CURRENT_TIMESTAMP
構文
TIMESTAMP CURRENT_TIMESTAMP()説明
現在のタイムスタンプを返します。 戻り値は固定ではありません。 この関数は MaxCompute V2.0 の追加関数です。
戻り値
TIMESTAMP 型の値が返されます。
例
-- 戻り値は '2017-08-03 11:50:30.661' です。 SET odps.sql.type.system.odps2=true; SELECT CURRENT_TIMESTAMP();
CURRENT_TIMEZONE
構文
STRING CURRENT_TIMEZONE()説明
現在のシステムのタイムゾーンを返します。
戻り値
STRING 型の値が返されます。
例
-- 戻り値は Asia/Shanghai です。 SELECT CURRENT_TIMEZONE();
DATE_ADD
構文
DATE DATE_ADD(DATE|TIMESTAMP|STRING <startdate>, BIGINT <delta>)説明
startdate で指定された日付値に、delta で指定された日数を加算または減算します。
パラメーター
パラメーター
必須
説明
startdate
はい
開始日。 DATE、DATETIME、または STRING 型の値がサポートされています。
入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATE 型に変換されます。 STRING 型の入力値には、
'2019-12-27'のように、少なくとも'yyyy-mm-dd'部分が含まれている必要があります。delta
はい
加算または減算する日数。 このパラメーターの値は BIGINT 型である必要があります。 delta の値が 0 より大きい場合、日数が開始日に加算されます。 delta の値が 0 未満の場合、日数が開始日から減算されます。 delta の値が 0 の場合、日付値は変更されません。
戻り値
DATE 型の値が返されます。 戻り値は
yyyy-mm-dd形式です。 戻り値は、次のルールに基づいて変化します。startdate の値が DATE、DATETIME、または STRING 型でない場合、エラーが返されます。
startdate の値が null の場合、エラーが返されます。
delta の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 2005-03-01 です。 1 日加算すると、結果は 2 月の最終日を超えます。 3 月の最初の日が返されます。 SELECT DATE_ADD(DATETIME '2005-02-28 00:00:00', 1); -- 戻り値は 2005-02-27 です。 1 日減算されます。 SELECT DATE_ADD(DATE '2005-02-28', -1); -- 戻り値は 2005-03-20 です。 SET odps.sql.type.system.odps2=false; SELECT DATE_ADD('2005-02-28 00:00:00', 20); -- 現在時刻が 2020-11-17 16:31:44 の場合、戻り値は 2020-11-16 です。 SELECT DATE_ADD(getdate(),-1); -- 戻り値は NULL です。 SELECT DATE_ADD('2005-02-28 00:00:00', null);テーブルデータの例
delta で指定された日数に基づいて、date1、datetime1、timestamp1 列の日付値を変更します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, DATE_ADD(date1, 1) AS date1_date_add, datetime1, DATE_ADD(datetime1, -1) AS datetime1_date_add, timestamp1, DATE_ADD(timestamp1, 0) AS timestamp1_date_add FROM mf_date_fun_t;次の結果が返されます。
+------------+----------------+---------------------+-------------------+-------------------------------+--------------------+ | date1 | date1_date_add | datetime1 | datetime1_date_add| timestamp1 | timestamp1_date_add| +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+ | 2021-11-29 | 2021-11-30 | 2021-11-29 00:01:00 | 2021-11-28 | 2021-01-11 00:00:00.123456789 | 2021-01-11 | | 2021-11-28 | 2021-11-29 | 2021-11-28 00:02:00 | 2021-11-27 | 2021-02-11 00:00:00.123456789 | 2021-02-11 | | 2021-11-27 | 2021-11-28 | 2021-11-27 00:03:00 | 2021-11-26 | 2021-03-11 00:00:00.123456789 | 2021-03-11 | | 2021-11-26 | 2021-11-27 | 2021-11-26 00:04:00 | 2021-11-25 | 2021-04-11 00:00:00.123456789 | 2021-04-11 | | 2021-11-25 | 2021-11-26 | 2021-11-25 00:05:00 | 2021-11-24 | 2021-05-11 00:00:00.123456789 | 2021-05-11 | | 2021-11-24 | 2021-11-25 | 2021-11-24 00:06:00 | 2021-11-23 | 2021-06-11 00:00:00.123456789 | 2021-06-11 | | 2021-11-23 | 2021-11-24 | 2021-11-23 00:07:00 | 2021-11-22 | 2021-07-11 00:00:00.123456789 | 2021-07-11 | | 2021-11-22 | 2021-11-23 | 2021-11-22 00:08:00 | 2021-11-21 | 2021-08-11 00:00:00.123456789 | 2021-08-11 | | 2021-11-21 | 2021-11-22 | 2021-11-21 00:09:00 | 2021-11-20 | 2021-09-11 00:00:00.123456789 | 2021-09-11 | | 2021-11-20 | 2021-11-21 | 2021-11-20 00:10:00 | 2021-11-19 | 2021-10-11 00:00:00.123456789 | 2021-10-11 | +------------+----------------+---------------------+-------------------+-------------------------------+--------------------+
DATEADD
構文
DATE|DATETIME DATEADD(DATE|DATETIME|TIMESTAMP <date>, BIGINT <delta>, STRING <datepart>)説明
datepart で指定された時間単位と delta で指定された間隔に基づいて date 値を変更します。 現在の時刻に間隔を加算または減算するには、この関数を GETDATE 関数と組み合わせて使用できます。
パラメーター
パラメーター
必須
説明
date
はい
DATE、DATETIME、または TIMESTAMP 型の日付値。 値の形式が DATETIME 型の形式
yyyy-mm-dd hh:mi:ss(例:2021-08-28 00:00:00) に準拠し、MaxCompute V1.0 データ型バージョンが使用されている場合、STRING 型の値は計算前に暗黙的に DATETIME 型の値に変換されます。delta
はい
日付値の指定されたコンポーネントに加算または減算する間隔。 このパラメーターの値は BIGINT 型である必要があります。 delta の値が 0 より大きい場合、間隔が日付値に加算されます。 それ以外の場合、間隔は日付値から減算されます。 入力値が STRING または DOUBLE 型の場合、値は計算前に暗黙的に BIGINT 型の値に変換されます。
説明datepart で指定された時間単位に基づいて delta で指定された間隔を加算または減算すると、より大きな日付コンポーネントで桁上がりまたは桁下がりが発生する可能性があります。 年、月、時、分、秒の部分は、それぞれ 10 進数、12 進数、24 進数、60 進数システムに従って計算されます。
DATEADD 関数が delta で指定された間隔を日付値の月コンポーネントに加算し、この操作が日コンポーネントでオーバーフローを引き起こさない場合は、日コンポーネントの値を保持します。 それ以外の場合は、日コンポーネントの値を指定された月の最終日に設定します。
datepart
はい
日付値で変更する日付部分。 値は STRING 型の定数です。 入力値の形式が無効であるか、入力値が STRING 型の定数でない場合、エラーが返されます。
このパラメーターの値は、STRING 型と DATETIME 型の間の変換ルールに準拠して指定されます。 値
yyyyは日付値の年コンポーネントを示します。 値mmは日付値の月コンポーネントを示します。 値ddは日付値の日コンポーネントを示します。 型変換のルールの詳細については、「データ型変換」をご参照ください。 拡張日付/時刻形式 (EDTF) もサポートされています。たとえば、-year、-month、-mon、-day、または-hourです。戻り値
DATE または DATETIME 型の値が返されます。 戻り値は
yyyy-mm-ddまたはyyyy-mm-dd hh:mi:ss形式です。 戻り値は、次のルールに基づいて変化します。date の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。
date の値が null の場合、エラーが返されます。
delta または datepart の値が null の場合、null が返されます。
例
静的データの例
例 1:一般的な使用法
-- 戻り値は 2005-03-01 00:00:00 です。 1 日加算すると、結果は 2 月の最終日を超えます。 3 月の最初の日が返されます。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'dd'); -- 戻り値は 2005-02-27 00:00:00 です。 1 日減算されます。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', -1, 'dd'); -- 戻り値は 2006-10-28 00:00:00 です。 20 ヶ月加算すると、月がオーバーフローし、年の値が 1 増加します。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 20, 'mm'); -- 戻り値は 2005-03-28 00:00:00 です。 SELECT DATEADD(DATETIME '2005-02-28 00:00:00', 1, 'mm'); -- 戻り値は 2005-02-28 00:00:00 です。 2005 年の 2 月は 28 日しかありません。 したがって、2 月の最終日が返されます。 SELECT DATEADD(DATETIME '2005-01-29 00:00:00', 1, 'mm'); -- 戻り値は 2005-02-28 00:00:00 です。 SELECT DATEADD(DATETIME '2005-03-30 00:00:00', -1, 'mm'); -- 戻り値は 2005-03-18 です。 SELECT DATEADD(DATE '2005-02-18', 1, 'mm'); -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2005-03-18 00:00:00.0 です。 SET odps.sql.type.system.odps2=true; SELECT DATEADD(TIMESTAMP '2005-02-18 00:00:00', 1, 'mm'); -- 現在時刻が 2020-11-17 16:31:44 の場合、戻り値は 2020-11-16 16:31:44 です。 SELECT DATEADD(GETDATE(),-1,'dd'); -- 戻り値は NULL です。 SELECT DATEADD(DATE '2005-02-18', 1, null); -- 戻り値は 2005-03-30 02:24:00 で、3 時間減算されます。 SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -3, 'hh'); -- 戻り値は 2005-03-30 04:54:00 で、30 分減算されます。 SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'mi'); -- 戻り値は 2005-03-30 05:23:30 で、30 秒減算されます。 SELECT DATEADD(DATETIME '2005-03-30 05:24:00', -30, 'ss');例 2:DATETIME 型の値を定数として表現する DATEADD の使用
MaxCompute SQL ステートメントでは、DATETIME 型の値を直接定数として表現することはできません。 次のステートメントでは、DATETIME 型の値の無効な式が使用されています。
SELECT DATEADD(2005-03-30 00:00:00, -1, 'mm');DATETIME 型の定数を記述するには、次のステートメントで DATETIME 型の値の有効な式を使用します。
-- STRING 型の定数を DATETIME 型に明示的に変換します。 戻り値は 2005-02-28 00:00:00 です。 SELECT DATEADD(CAST("2005-03-30 00:00:00" AS datetime), -1, 'mm');例 3:入力値が STRING 型の場合
-- 入力値は STRING 型ですが、DATETIME 型の形式に準拠していません。 その結果、エラーが返されます。 SELECT DATEADD('2021-08-27',1,'dd'); -- 入力値は STRING 型で、DATETIME 型の形式に準拠しており、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されています。 戻り値は 2005-03-01 00:00:00 です。 SET odps.sql.type.system.odps2=false; SELECT DATEADD('2005-02-28 00:00:00', 1, 'dd');
テーブルデータの例
datepart で指定された時間単位と delta で指定された間隔に基づいて、date1、datetime1、timestamp1 列の日付値を変更します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, DATEADD(date1,1,'dd') AS date1_dateadd, datetime1, DATEADD(datetime1,1,'mm') AS datetime1_dateadd, timestamp1, DATEADD(timestamp1,-1,'yyyy') AS timestamp1_dateadd FROM mf_date_fun_t;次の結果が返されます。
+------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+ | date1 | date1_dateadd | datetime1 | datetime1_dateadd | timestamp1 | timestamp1_dateadd | +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+ | 2021-11-29 | 2021-11-30 | 2021-11-29 00:01:00 | 2021-12-29 00:01:00 | 2021-01-11 00:00:00.123456789 | 2020-01-11 00:00:00.123456789 | | 2021-11-28 | 2021-11-29 | 2021-11-28 00:02:00 | 2021-12-28 00:02:00 | 2021-02-11 00:00:00.123456789 | 2020-02-11 00:00:00.123456789 | | 2021-11-27 | 2021-11-28 | 2021-11-27 00:03:00 | 2021-12-27 00:03:00 | 2021-03-11 00:00:00.123456789 | 2020-03-11 00:00:00.123456789 | | 2021-11-26 | 2021-11-27 | 2021-11-26 00:04:00 | 2021-12-26 00:04:00 | 2021-04-11 00:00:00.123456789 | 2020-04-11 00:00:00.123456789 | | 2021-11-25 | 2021-11-26 | 2021-11-25 00:05:00 | 2021-12-25 00:05:00 | 2021-05-11 00:00:00.123456789 | 2020-05-11 00:00:00.123456789 | | 2021-11-24 | 2021-11-25 | 2021-11-24 00:06:00 | 2021-12-24 00:06:00 | 2021-06-11 00:00:00.123456789 | 2020-06-11 00:00:00.123456789 | | 2021-11-23 | 2021-11-24 | 2021-11-23 00:07:00 | 2021-12-23 00:07:00 | 2021-07-11 00:00:00.123456789 | 2020-07-11 00:00:00.123456789 | | 2021-11-22 | 2021-11-23 | 2021-11-22 00:08:00 | 2021-12-22 00:08:00 | 2021-08-11 00:00:00.123456789 | 2020-08-11 00:00:00.123456789 | | 2021-11-21 | 2021-11-22 | 2021-11-21 00:09:00 | 2021-12-21 00:09:00 | 2021-09-11 00:00:00.123456789 | 2020-09-11 00:00:00.123456789 | | 2021-11-20 | 2021-11-21 | 2021-11-20 00:10:00 | 2021-12-20 00:10:00 | 2021-10-11 00:00:00.123456789 | 2020-10-11 00:00:00.123456789 | +------------+---------------+---------------------+---------------------+-------------------------------+-------------------------------+
DATE_FORMAT
構文
STRING DATE_FORMAT(DATE|TIMESTAMP|STRING <date>, STRING <format>)説明
date 値を指定された format の文字列に変換します。
パラメーター
パラメーター
必須
説明
date
はい
変換する日付値。 日付値は DATE、TIMESTAMP、または STRING 型にすることができます。
DATE または STRING 型の日付値は、Hive 互換データ型バージョンが有効になっている場合にのみサポートされます。
set odps.sql.hive.compatible=true;コマンドを実行して、Hive 互換データ型バージョンを有効にできます。日付値が STRING 型の場合、次の形式のみがサポートされます。
'yyyy-MM-dd'(例:'2019-12-27')。'yyyy-MM-dd hh:mm:ss'(例:'2019-12-27 12:23:10')。'yyyy-MM-dd hh:mm:ss.SSS'(例:'2019-12-27 12:23:10.123')。
format
はい
STRING 型の定数。 format は、
yyyy-MM-dd hh:mm:ss: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>)説明
startdate で指定された日付値に、delta で指定された日数を加算または減算します。
パラメーター
パラメーター
必須
説明
startdate
はい
開始日。 DATE、DATETIME、または STRING 型の値がサポートされています。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATE 型に変換されます。 STRING 型の入力値には、
'2019-12-27'のように、少なくとも'yyyy-mm-dd'部分が含まれている必要があります。delta
はい
加算または減算する日数。 このパラメーターの値は BIGINT 型である必要があります。 delta の値が 0 より大きい場合、日数が開始日から減算されます。 delta の値が 0 未満の場合、日数が開始日に加算されます。 delta の値が 0 の場合、日付値は変更されません。
戻り値
DATE 型の値が返されます。 戻り値は
yyyy-mm-dd形式です。 戻り値は、次のルールに基づいて変化します。startdate の値が DATE、DATETIME、または STRING 型でない場合、エラーが返されます。
startdate の値が null の場合、エラーが返されます。
delta の値が null の場合、null が返されます。
例
静的データの例
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; -- 戻り値は 2005-02-28 です。 1 日減算されます。 2 月の最終日が返されます。 SELECT DATE_SUB(datetime '2005-03-01 00:00:00', 1); -- 戻り値は 2005-03-01 です。 1 日加算されます。 SELECT DATE_SUB(date '2005-02-28', -1); -- 戻り値は 2005-02-27 です。 2 日減算されます。 SET odps.sql.type.system.odps2=false; SELECT DATE_SUB('2005-03-01 00:00:00', 2); -- 現在時刻が 2021-09-10 16:31:44 の場合、戻り値は 2021-09-09 です。 SELECT DATE_SUB(GETDATE(),1); -- 戻り値は NULL です。 SELECT DATE_SUB('2005-03-01 00:00:00', null);テーブルデータの例
delta で指定された日数に基づいて、date1、datetime1、timestamp1 列の日付値を変更します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, DATE_SUB(date1,1) AS date1_date_sub, datetime1, DATE_SUB(datetime1,-1) AS datetime1_date_sub, timestamp1, DATE_SUB(timestamp1,0) AS timestamp1_date_sub FROM mf_date_fun_t;次の結果が返されます。
+------------+----------------+---------------------+--------------------+-------------------------------+---------------------+ | date1 | date1_date_sub | datetime1 | datetime1_date_sub | timestamp1 | timestamp1_date_sub | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+ | 2021-11-29 | 2021-11-28 | 2021-11-29 00:01:00 | 2021-11-30 | 2021-01-11 00:00:00.123456789 | 2021-01-11 | | 2021-11-28 | 2021-11-27 | 2021-11-28 00:02:00 | 2021-11-29 | 2021-02-11 00:00:00.123456789 | 2021-02-11 | | 2021-11-27 | 2021-11-26 | 2021-11-27 00:03:00 | 2021-11-28 | 2021-03-11 00:00:00.123456789 | 2021-03-11 | | 2021-11-26 | 2021-11-25 | 2021-11-26 00:04:00 | 2021-11-27 | 2021-04-11 00:00:00.123456789 | 2021-04-11 | | 2021-11-25 | 2021-11-24 | 2021-11-25 00:05:00 | 2021-11-26 | 2021-05-11 00:00:00.123456789 | 2021-05-11 | | 2021-11-24 | 2021-11-23 | 2021-11-24 00:06:00 | 2021-11-25 | 2021-06-11 00:00:00.123456789 | 2021-06-11 | | 2021-11-23 | 2021-11-22 | 2021-11-23 00:07:00 | 2021-11-24 | 2021-07-11 00:00:00.123456789 | 2021-07-11 | | 2021-11-22 | 2021-11-21 | 2021-11-22 00:08:00 | 2021-11-23 | 2021-08-11 00:00:00.123456789 | 2021-08-11 | | 2021-11-21 | 2021-11-20 | 2021-11-21 00:09:00 | 2021-11-22 | 2021-09-11 00:00:00.123456789 | 2021-09-11 | | 2021-11-20 | 2021-11-19 | 2021-11-20 00:10:00 | 2021-11-21 | 2021-10-11 00:00:00.123456789 | 2021-10-11 | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+
DATEDIFF
構文
BIGINT DATEDIFF(DATE|DATETIME|TIMESTAMP <date1>, DATE|DATETIME|TIMESTAMP <date2>, STRING <datepart>)説明
date1 と date2 の差を計算します。 差は datepart で指定された時間単位で測定されます。
パラメーター
パラメーター
必須
説明
date1 and date2
はい
DATE、DATETIME、または TIMESTAMP 型の値。 パラメーターは被減数と減数を指定します。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。
説明MaxCompute V2.0 データ型バージョンのみが TIMESTAMP 型をサポートします。 詳細については、「データ型バージョン 2.0」をご参照ください。
datepart
いいえ
時間単位。STRING 型の定数です。
MaxCompute V2.0 データ型バージョンを有効にする場合、datepart を空にすることができます。 デフォルト値:day。 MaxCompute V2.0 データ型バージョンの詳細については、「データ型バージョンガイド」をご参照ください。 EDTF もサポートされています。たとえば、
-year、-month、-mon、-day、または-hourです。説明この関数は、datepart で指定された時間単位に基づいて下位単位を省略し、結果を計算します。
戻り値
BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
date1 または date2 の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。
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
はい
DATE、DATETIME、または TIMESTAMP 型の値。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。
datepart
はい
STRING 型の定数。 このパラメーターは EDTF をサポートします。
このパラメーターの値は、STRING 型と DATETIME 型の間の変換ルールに準拠して指定されます。 値
yyyyは日付値の年コンポーネントを示します。 値mmは日付値の月コンポーネントを示します。 値ddは日付値の日コンポーネントを示します。 型変換のルールの詳細については、「データ型変換」をご参照ください。 EDTF もサポートされています。たとえば、-year、-month、-mon、-day、または-hourです。戻り値
BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
date の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。
date の値が null の場合、エラーが返されます。
datepart の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 2013 です。 SELECT DATEPART(DATETIME '2013-06-08 01:10:00', 'yyyy'); -- 戻り値は 6 です。 SELECT DATEPART(DATETIME '2013-06-08 01:10:00', 'mm'); -- 戻り値は 2013 です。 SELECT DATEPART(DATE '2013-06-08', 'yyyy'); -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2013 です。 SET odps.sql.type.system.odps2=true; SELECT DATEPART(TIMESTAMP '2013-06-08 01:10:00', 'yyyy'); -- 戻り値は 2013 です。 SET odps.sql.type.system.odps2=false; SELECT DATEPART('2013-06-08 01:10:00', 'yyyy'); -- 戻り値は NULL です。 SELECT DATEPART(DATE '2013-06-08', null);テーブルデータの例
datepart で指定された時間単位に基づいて、date1、datetime1、timestamp1 列から日付値を抽出します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, DATEPART(date1,'yyyy') AS date1_datepart, datetime1, DATEPART(datetime1,'dd') AS datetime1_datepart, timestamp1, datepart(timestamp1,'mm') AS timestamp1_datepart FROM mf_date_fun_t;次の結果が返されます。
+------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+ | date1 | date1_datepart | datetime1 | datetime1_datepart | timestamp1 | timestamp1_datepart | +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+ | 2021-11-29 | 2021 | 2021-11-29 00:01:00 | 29 | 2021-01-11 00:00:00.123456789 | 1 | | 2021-11-28 | 2021 | 2021-11-28 00:02:00 | 28 | 2021-02-11 00:00:00.123456789 | 2 | | 2021-11-27 | 2021 | 2021-11-27 00:03:00 | 27 | 2021-03-11 00:00:00.123456789 | 3 | | 2021-11-26 | 2021 | 2021-11-26 00:04:00 | 26 | 2021-04-11 00:00:00.123456789 | 4 | | 2021-11-25 | 2021 | 2021-11-25 00:05:00 | 25 | 2021-05-11 00:00:00.123456789 | 5 | | 2021-11-24 | 2021 | 2021-11-24 00:06:00 | 24 | 2021-06-11 00:00:00.123456789 | 6 | | 2021-11-23 | 2021 | 2021-11-23 00:07:00 | 23 | 2021-07-11 00:00:00.123456789 | 7 | | 2021-11-22 | 2021 | 2021-11-22 00:08:00 | 22 | 2021-08-11 00:00:00.123456789 | 8 | | 2021-11-21 | 2021 | 2021-11-21 00:09:00 | 21 | 2021-09-11 00:00:00.123456789 | 9 | | 2021-11-20 | 2021 | 2021-11-20 00:10:00 | 20 | 2021-10-11 00:00:00.123456789 | 10 | +------------+----------------+---------------------+-------------------------+-------------------------------+---------------------+
DATETRUNC
構文
DATE|DATETIME DATETRUNC(DATE|DATETIME|TIMESTAMP <date>, STRING <datepart>)説明
datepart で指定された時間単位に基づいて date 値を切り捨てます。
パラメーター
パラメーター
必須
説明
date
はい
DATE、DATETIME、または TIMESTAMP 型の値。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。
datepart
はい
STRING 型の定数。 このパラメーターは EDTF をサポートします。
このパラメーターの値は、STRING 型と DATETIME 型の間の変換ルールに準拠して指定されます。 値
yyyyは日付値の年コンポーネントを示します。 値mmは日付値の月コンポーネントを示します。 値ddは日付値の日コンポーネントを示します。 型変換のルールの詳細については、「データ型変換」をご参照ください。 EDTF もサポートされています。たとえば、-year、-month、-mon、-day、または-hourです。戻り値
DATE または DATETIME 型の値が返されます。 戻り値は
yyyy-mm-ddまたはyyyy-mm-dd hh:mi:ss形式です。 戻り値は、次のルールに基づいて変化します。date の値が DATE、DATETIME、または TIMESTAMP 型でない場合、エラーが返されます。
date の値が null の場合、エラーが返されます。
datepart の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 2011-01-01 00:00:00 です。 SELECT DATETRUNC(DATETIME '2011-12-07 16:28:46', 'yyyy'); -- 戻り値は 2011-12-01 00:00:00 です。 SELECT DATETRUNC(DATETIME'2011-12-07 16:28:46', 'month'); -- 戻り値は 2011-12-07 00:00:00 です。 SELECT DATETRUNC(DATETIME'2011-12-07 16:28:46', 'DD'); -- 戻り値は 2011-01-01 です。 SELECT DATETRUNC(DATE '2011-12-07', 'yyyy'); -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2011-01-01 00:00:00.0 です。 SET odps.sql.type.system.odps2=true; SELECT DATETRUNC(TIMESTAMP '2011-12-07 16:28:46', 'yyyy'); -- 戻り値は 2011-01-01 00:00:00.0 です。 SET odps.sql.type.system.odps2=false; SELECT DATETRUNC('2011-12-07 16:28:46', 'yyyy'); -- 戻り値は NULL です。 SELECT DATETRUNC(DATE '2011-12-07', null);テーブルデータの例
datepart で指定された時間単位に基づいて、date1、datetime1、timestamp1 列の日付値を切り捨てます。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, DATETRUNC(date1,'yyyy') AS date1_datetrunc, datetime1, DATETRUNC(datetime1,'dd') AS datetime1_datetrunc, timestamp1, DATETRUNC(timestamp1,'mm') AS timestamp1_datetrunc FROM mf_date_fun_t;次の結果が返されます。
+------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+ | date1 | date1_datetrunc | datetime1 | datetime1_datetrunc | timestamp1 | timestamp1_datetrunc | +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+ | 2021-11-29 | 2021-01-01 | 2021-11-29 00:01:00 | 2021-11-29 00:00:00 | 2021-01-11 00:00:00.123456789 | 2021-01-01 00:00:00 | | 2021-11-28 | 2021-01-01 | 2021-11-28 00:02:00 | 2021-11-28 00:00:00 | 2021-02-11 00:00:00.123456789 | 2021-02-01 00:00:00 | | 2021-11-27 | 2021-01-01 | 2021-11-27 00:03:00 | 2021-11-27 00:00:00 | 2021-03-11 00:00:00.123456789 | 2021-03-01 00:00:00 | | 2021-11-26 | 2021-01-01 | 2021-11-26 00:04:00 | 2021-11-26 00:00:00 | 2021-04-11 00:00:00.123456789 | 2021-04-01 00:00:00 | | 2021-11-25 | 2021-01-01 | 2021-11-25 00:05:00 | 2021-11-25 00:00:00 | 2021-05-11 00:00:00.123456789 | 2021-05-01 00:00:00 | | 2021-11-24 | 2021-01-01 | 2021-11-24 00:06:00 | 2021-11-24 00:00:00 | 2021-06-11 00:00:00.123456789 | 2021-06-01 00:00:00 | | 2021-11-23 | 2021-01-01 | 2021-11-23 00:07:00 | 2021-11-23 00:00:00 | 2021-07-11 00:00:00.123456789 | 2021-07-01 00:00:00 | | 2021-11-22 | 2021-01-01 | 2021-11-22 00:08:00 | 2021-11-22 00:00:00 | 2021-08-11 00:00:00.123456789 | 2021-08-01 00:00:00 | | 2021-11-21 | 2021-01-01 | 2021-11-21 00:09:00 | 2021-11-21 00:00:00 | 2021-09-11 00:00:00.123456789 | 2021-09-01 00:00:00 | | 2021-11-20 | 2021-01-01 | 2021-11-20 00:10:00 | 2021-11-20 00:00:00 | 2021-10-11 00:00:00.123456789 | 2021-10-01 00:00:00 | +------------+-----------------+---------------------+---------------------+-------------------------------+----------------------+
DAY
構文
INT DAY(DATETIME|TIMESTAMP|DATE|STRING <date>)説明
日付値が属する日を返します。 この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は
yyyy-mm-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
はい
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となります。パラメーター
パラメーター
必須
説明
{any primitive type}*
はい
TIMESTAMP、DATETIME、TINYINT、SMALLINT、INT、または BIGINT 型のタイムスタンプ。 値が TINYINT、SMALLINT、INT、または BIGINT 型の場合、時間単位はミリ秒単位で正確です。
timezone
はい
新しいタイムゾーン。
説明検索エンジンを使用してタイムゾーンのリストを検索できます。
戻り値
TIMESTAMP 型の値が返されます。 戻り値は
yyyy-mm-dd hh:mi:ss.ff3形式です。 戻り値は、次のルールに基づいて変化します。{any primitive type}* の値が TIMESTAMP、DATETIME、TINYINT、SMALLINT、INT、または BIGINT 型でない場合、エラーが返されます。
{any primitive type}* の値が null の場合、エラーが返されます。
timezone の値が null の場合、null が返されます。
例
静的データの例
-- 入力値の時間単位はミリ秒単位で正確で、戻り値は 2017-08-01 04:24:00.0 です。 SELECT FROM_UTC_TIMESTAMP(1501557840000, 'PST'); -- 戻り値は 1970-01-30 08:00:00.0 です。 SELECT FROM_UTC_TIMESTAMP('1970-01-30 16:00:00','PST'); -- 戻り値は 1970-01-29 16:00:00.0 です。 SELECT FROM_UTC_TIMESTAMP('1970-01-30','PST'); -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2011-12-25 17:00:00:00.123 です。 SET odps.sql.type.system.odps2=true; SELECT FROM_UTC_TIMESTAMP(timestamp '2011-12-25 09:00:00.123456', 'Asia/Shanghai'); -- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 戻り値は 2011-12-25 01:55:00.0 です。 SET odps.sql.type.system.odps2=true; SELECT FROM_UTC_TIMESTAMP(timestamp '2011-12-25 06:55:00', 'America/Toronto'); -- 戻り値は NULL です。 SELECT FROM_UTC_TIMESTAMP('1970-01-30',null);テーブルデータの例
datetime1 および timestamp1 列の日付値を指定されたタイムゾーンのタイムスタンプに変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT datetime1, FROM_UTC_TIMESTAMP(datetime1,'PST') pst, timestamp1, FROM_UTC_TIMESTAMP(timestamp1,'Asia/Shanghai') asia FROM mf_date_fun_t;次の結果が返されます。
+---------------------+---------------------+-------------------------------+-------------------------------+ | datetime1 | pst | timestamp1 | asia | +---------------------+---------------------+-------------------------------+-------------------------------+ | 2021-11-29 00:01:00 | 2021-11-28 16:01:00 | 2021-01-11 00:00:00.123456789 | 2021-01-11 08:00:00.123456789 | | 2021-11-28 00:02:00 | 2021-11-27 16:02:00 | 2021-02-11 00:00:00.123456789 | 2021-02-11 08:00:00.123456789 | | 2021-11-27 00:03:00 | 2021-11-26 16:03:00 | 2021-03-11 00:00:00.123456789 | 2021-03-11 08:00:00.123456789 | | 2021-11-26 00:04:00 | 2021-11-25 16:04:00 | 2021-04-11 00:00:00.123456789 | 2021-04-11 08:00:00.123456789 | | 2021-11-25 00:05:00 | 2021-11-24 16:05:00 | 2021-05-11 00:00:00.123456789 | 2021-05-11 08:00:00.123456789 | | 2021-11-24 00:06:00 | 2021-11-23 16:06:00 | 2021-06-11 00:00:00.123456789 | 2021-06-11 08:00:00.123456789 | | 2021-11-23 00:07:00 | 2021-11-22 16:07:00 | 2021-07-11 00:00:00.123456789 | 2021-07-11 08:00:00.123456789 | | 2021-11-22 00:08:00 | 2021-11-21 16:08:00 | 2021-08-11 00:00:00.123456789 | 2021-08-11 08:00:00.123456789 | | 2021-11-21 00:09:00 | 2021-11-20 16:09:00 | 2021-09-11 00:00:00.123456789 | 2021-09-11 08:00:00.123456789 | | 2021-11-20 00:10:00 | 2021-11-19 16:10:00 | 2021-10-11 00:00:00.123456789 | 2021-10-11 08:00:00.123456789 | +---------------------+---------------------+-------------------------------+-------------------------------+
GETDATE
構文
DATETIME GETDATE()説明
現在のシステム時刻を日付値として返します。 MaxCompute は UTC+08:00 を標準タイムゾーンとして使用します。
戻り値
現在の日付と時刻が返されます。これは DATETIME 型です。
説明MaxCompute SQL では、
GETDATEは常に固定値を返します。 戻り値は、MaxCompute SQL タスクの実行中の任意の時刻です。 時刻は秒単位で正確です。 MaxCompute V2.0 データ型バージョンを有効にすると、時刻はミリ秒単位で正確になります。
HOUR
構文
INT HOUR(DATETIME|TIMESTAMP|STRING <date>)説明
日付値の時コンポーネントを返します。
パラメーター
date:必須。 DATETIME、TIMESTAMP、または STRING 型の日付値。 日付値は
yyyy-mm-dd hh:mi:ssまたはyyyy-mm-dd hh:mi:ss.ff3形式です。 値が STRING 型の場合、値には少なくともyyyy-mm-dd部分が含まれている必要があり、余分な文字列を含めることはできません。 この関数は MaxCompute V2.0 の追加関数です。戻り値
INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
date の値が DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。
date の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 12 です。 SELECT HOUR('2014-09-01 12:00:00'); -- 戻り値は 12 です。 SELECT HOUR('12:00:00'); -- 戻り値は NULL です。 SELECT HOUR('20140901120000'); -- 戻り値は NULL です。 SELECT HOUR(null);テーブルデータの例
datetime1 および timestamp1 列の日付値の時コンポーネントを取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT datetime1, HOUR(datetime1) AS datetime1_hour, timestamp1, HOUR(timestamp1) AS timestamp1_hour FROM mf_date_fun_t;次の結果が返されます。
+---------------------+----------------+-------------------------------+-----------------+ | datetime1 | datetime1_hour | timestamp1 | timestamp1_hour | +---------------------+----------------+-------------------------------+-----------------+ | 2021-11-29 00:01:00 | 0 | 2021-01-11 00:00:00.123456789 | 0 | | 2021-11-28 00:02:00 | 0 | 2021-02-11 00:00:00.123456789 | 0 | | 2021-11-27 00:03:00 | 0 | 2021-03-11 00:00:00.123456789 | 0 | | 2021-11-26 00:04:00 | 0 | 2021-04-11 00:00:00.123456789 | 0 | | 2021-11-25 00:05:00 | 0 | 2021-05-11 00:00:00.123456789 | 0 | | 2021-11-24 00:06:00 | 0 | 2021-06-11 00:00:00.123456789 | 0 | | 2021-11-23 00:07:00 | 0 | 2021-07-11 00:00:00.123456789 | 0 | | 2021-11-22 00:08:00 | 0 | 2021-08-11 00:00:00.123456789 | 0 | | 2021-11-21 00:09:00 | 0 | 2021-09-11 00:00:00.123456789 | 0 | | 2021-11-20 00:10:00 | 0 | 2021-10-11 00:00:00.123456789 | 0 | +---------------------+----------------+-------------------------------+-----------------+
ISDATE
構文
BOOLEAN ISDATE(STRING <date>, STRING <format>)説明
日付文字列が指定された形式の日付値に変換できるかどうかを判断します。 日付文字列が指定された形式の日付値に変換できる場合は true が返され、それ以外の場合は false が返されます。
パラメーター
パラメーター
必須
説明
date
はい
STRING 型の値。 入力値が BIGINT、DOUBLE、DECIMAL、または DATETIME 型の場合、値は計算前に暗黙的に STRING 型の値に変換されます。
format
はい
STRING 型の定数。 このパラメーターは EDTF をサポートしません。 format に冗長な形式文字列が存在する場合、この関数は最初の形式文字列に対応する日付文字列を日付値に変換します。 残りの文字列は区切り文字と見なされます。 たとえば、
isdate("1234-yyyy", "yyyy-yyyy")は true を返します。戻り値
BOOLEAN 型の値が返されます。 date または format の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は true です。 SELECT ISDATE('2021-10-11','yyyy-mm-dd'); -- 戻り値は false です。 SET odps.sql.type.system.odps2=false; SELECT ISDATE(1678952314,'yyyy-mm-dd');テーブルデータの例
date3 列の日付文字列が指定された形式の日付値に変換できるかどうかを判断します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
SELECT date3, ISDATE(date3,'yyyy-mm-dd') AS date3_isdate FROM mf_date_fun_t;次の結果が返されます。
+------------+--------------+ | date3 | date3_isdate | +------------+--------------+ | 2021-11-20 | true | | 2021-11-21 | true | | 2021-11-22 | true | | 2021-11-23 | true | | 2021-11-24 | true | | 2021-11-25 | true | | 2021-11-26 | true | | 2021-11-27 | true | | 2021-11-28 | true | | 2021-11-29 | true | +------------+--------------+
LAST_DAY
構文
STRING LAST_DAY(DATE|DATETIME|TIMESTAMP|STRING <date>)説明
日付値が属する月の最終日を返します。 この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date:必須。 DATE、DATETIME、TIMESTAMP、または STRING 型の日付値。 値が STRING 型の場合、値には少なくとも
yyyy-mm-dd部分が含まれている必要があり、余分な文字列を含めることはできません。戻り値
STRING 型の値が返されます。 戻り値は
yyyy-mm-dd形式です。 戻り値は、次のルールに基づいて変化します。date の値が DATE、DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。
date の値が null の場合、エラーが返されます。
例
静的データの例
-- 戻り値は 2017-03-31 です。 SELECT LAST_DAY('2017-03-04'); -- 戻り値は 2017-07-31 です。 SELECT LAST_DAY('2017-07-04 11:40:00'); -- 戻り値は NULL です。 SELECT LAST_DAY('20170304');テーブルデータの例
date1、datetime1、timestamp1、date3 列の各日付値が属する月の最終日を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, LAST_DAY(date1) AS date1_lastday, datetime1, LAST_DAY(datetime1) AS datetime1_lastday, timestamp1, LAST_DAY(timestamp1) AS timestamp1_lastday, date3, LAST_DAY(date3) AS date3_lastday FROM mf_date_fun_t;次の結果が返されます。
+------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+ | date1 | date1_lastday | datetime1 | datetime1_lastday | timestamp1 | timestamp1_lastday | date3 | date3_lastday | +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+ | 2021-11-29 | 2021-11-30 | 2021-11-29 00:01:00 | 2021-11-30 | 2021-01-11 00:00:00.123456789 | 2021-01-31 | 2021-11-20 | 2021-11-30 | | 2021-11-28 | 2021-11-30 | 2021-11-28 00:02:00 | 2021-11-30 | 2021-02-11 00:00:00.123456789 | 2021-02-28 | 2021-11-21 | 2021-11-30 | | 2021-11-27 | 2021-11-30 | 2021-11-27 00:03:00 | 2021-11-30 | 2021-03-11 00:00:00.123456789 | 2021-03-31 | 2021-11-22 | 2021-11-30 | | 2021-11-26 | 2021-11-30 | 2021-11-26 00:04:00 | 2021-11-30 | 2021-04-11 00:00:00.123456789 | 2021-04-30 | 2021-11-23 | 2021-11-30 | | 2021-11-25 | 2021-11-30 | 2021-11-25 00:05:00 | 2021-11-30 | 2021-05-11 00:00:00.123456789 | 2021-05-31 | 2021-11-24 | 2021-11-30 | | 2021-11-24 | 2021-11-30 | 2021-11-24 00:06:00 | 2021-11-30 | 2021-06-11 00:00:00.123456789 | 2021-06-30 | 2021-11-25 | 2021-11-30 | | 2021-11-23 | 2021-11-30 | 2021-11-23 00:07:00 | 2021-11-30 | 2021-07-11 00:00:00.123456789 | 2021-07-31 | 2021-11-26 | 2021-11-30 | | 2021-11-22 | 2021-11-30 | 2021-11-22 00:08:00 | 2021-11-30 | 2021-08-11 00:00:00.123456789 | 2021-08-31 | 2021-11-27 | 2021-11-30 | | 2021-11-21 | 2021-11-30 | 2021-11-21 00:09:00 | 2021-11-30 | 2021-09-11 00:00:00.123456789 | 2021-09-30 | 2021-11-28 | 2021-11-30 | | 2021-11-20 | 2021-11-30 | 2021-11-20 00:10:00 | 2021-11-30 | 2021-10-11 00:00:00.123456789 | 2021-10-31 | 2021-11-29 | 2021-11-30 | +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
LASTDAY
構文
DATETIME LASTDAY(DATETIME <date>)説明
date 値が属する月の最終日を返します。 日コンポーネントのみが切り捨てられます。 時、分、秒のコンポーネントは
00:00:00として表現されます。パラメーター
date:DATETIME 型の日付値。 日付値は
yyyy-mm-dd hh:mi:ss形式です。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。戻り値
DATETIME 型の値が返されます。 戻り値は
yyyy-mm-dd hh:mi:ss形式です。 戻り値は、次のルールに基づいて変化します。date の値が DATETIME または STRING 型でない場合、または形式が要件を満たしていない場合、エラーが返されます。
date の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 2013-06-30 00:00:00 です。 SELECT LASTDAY (DATETIME '2013-06-08 01:10:00'); -- 戻り値は 2013-06-30 00:00:00 です。 SET odps.sql.type.system.odps2=false; SELECT LASTDAY ('2013-06-08 01:10:00'); -- 戻り値は NULL です。 SELECT LASTDAY (null);テーブルデータの例
datetime1 列の各日付値が属する月の最終日を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
SELECT datetime1, LASTDAY(datetime1) AS datetime1_lastday FROM mf_date_fun_t;次の結果が返されます。
+---------------------+---------------------+ | datetime1 | datetime1_lastday | +---------------------+---------------------+ | 2021-11-29 00:01:00 | 2021-11-30 00:00:00 | | 2021-11-28 00:02:00 | 2021-11-30 00:00:00 | | 2021-11-27 00:03:00 | 2021-11-30 00:00:00 | | 2021-11-26 00:04:00 | 2021-11-30 00:00:00 | | 2021-11-25 00:05:00 | 2021-11-30 00:00:00 | | 2021-11-24 00:06:00 | 2021-11-30 00:00:00 | | 2021-11-23 00:07:00 | 2021-11-30 00:00:00 | | 2021-11-22 00:08:00 | 2021-11-30 00:00:00 | | 2021-11-21 00:09:00 | 2021-11-30 00:00:00 | | 2021-11-20 00:10:00 | 2021-11-30 00:00:00 | +---------------------+---------------------+
MINUTE
構文
INT MINUTE(DATETIME|TIMESTAMP|STRING <date>)説明
日付値の分コンポーネントを返します。 この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date:必須。 DATETIME、TIMESTAMP、または STRING 型の日付値。 日付値は
yyyy-mm-dd hh:mi:ssまたはyyyy-mm-dd hh:mi:ss.ff3形式です。戻り値
INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
date の値が DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。
date の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 30 です。 SELECT MINUTE('2014-09-01 12:30:00'); -- 戻り値は 30 です。 SELECT MINUTE('12:30:00'); -- 戻り値は NULL です。 SELECT MINUTE('20140901120000'); -- 戻り値は NULL です。 SELECT MINUTE(null);テーブルデータの例
datetime1 および timestamp1 列の日付値の分コンポーネントを取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT datetime1, MINUTE(datetime1) AS datetime1_minute, timestamp1, MINUTE(timestamp1) AS timestamp1_minute FROM mf_date_fun_t;次の結果が返されます。
+---------------------+------------------+-------------------------------+-------------------+ | datetime1 | datetime1_minute | timestamp1 | timestamp1_minute | +---------------------+------------------+-------------------------------+-------------------+ | 2021-11-29 00:01:00 | 1 | 2021-01-11 00:00:00.123456789 | 0 | | 2021-11-28 00:02:00 | 2 | 2021-02-11 00:00:00.123456789 | 0 | | 2021-11-27 00:03:00 | 3 | 2021-03-11 00:00:00.123456789 | 0 | | 2021-11-26 00:04:00 | 4 | 2021-04-11 00:00:00.123456789 | 0 | | 2021-11-25 00:05:00 | 5 | 2021-05-11 00:00:00.123456789 | 0 | | 2021-11-24 00:06:00 | 6 | 2021-06-11 00:00:00.123456789 | 0 | | 2021-11-23 00:07:00 | 7 | 2021-07-11 00:00:00.123456789 | 0 | | 2021-11-22 00:08:00 | 8 | 2021-08-11 00:00:00.123456789 | 0 | | 2021-11-21 00:09:00 | 9 | 2021-09-11 00:00:00.123456789 | 0 | | 2021-11-20 00:10:00 | 10 | 2021-10-11 00:00:00.123456789 | 0 | +---------------------+------------------+-------------------------------+-------------------+
MONTH
構文
INT MONTH(DATETIME|TIMESTAMP|DATE|STRING <date>)説明
日付値が属する月を返します。 この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は
yyyy-mm-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 型の値。 このパラメーターの値は、曜日の最初の 2 文字または 3 文字、または曜日のフルネーム (MO、TUE、FRIDAY など) にすることができます。
戻り値
STRING 型の値が返されます。 戻り値は
yyyy-mm-dd形式です。 戻り値は、次のルールに基づいて変化します。date の値が TIMESTAMP、DATE、DATETIME、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。
date の値が null の場合、エラーが返されます。
week の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 2017-08-08 です。 SELECT NEXT_DAY('2017-08-01','TU'); -- 戻り値は 2017-08-08 です。 SELECT NEXT_DAY('2017-08-01 23:34:00', 'TU'); -- 戻り値は NULL です。 SELECT NEXT_DAY('20170801','TU'); -- 戻り値は NULL です。 SELECT NEXT_DAY('2017-08-01 23:34:00', null);テーブルデータの例
date1、datetime1、timestamp1、date3 列の各日付値に対応する次の週の日の日付を取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, NEXT_DAY(date1,'MON') AS date1_next_day, datetime1, NEXT_DAY(datetime1,'TUE') AS datetime1_next_day, timestamp1, NEXT_DAY(timestamp1,'WED') AS timestamp1_next_day, date3, NEXT_DAY(date3,'THU') AS date3_next_day FROM mf_date_fun_t;次の結果が返されます。
+------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+ | date1 | date1_next_day | datetime1 | datetime1_next_day | timestamp1 | timestamp1_next_day | date3 | date3_next_day | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+ | 2021-11-29 | 2021-12-06 | 2021-11-29 00:01:00 | 2021-11-30 | 2021-01-11 00:00:00.123456789 | 2021-01-13 | 2021-11-20 | 2021-11-25 | | 2021-11-28 | 2021-11-29 | 2021-11-28 00:02:00 | 2021-11-30 | 2021-02-11 00:00:00.123456789 | 2021-02-17 | 2021-11-21 | 2021-11-25 | | 2021-11-27 | 2021-11-29 | 2021-11-27 00:03:00 | 2021-11-30 | 2021-03-11 00:00:00.123456789 | 2021-03-17 | 2021-11-22 | 2021-11-25 | | 2021-11-26 | 2021-11-29 | 2021-11-26 00:04:00 | 2021-11-30 | 2021-04-11 00:00:00.123456789 | 2021-04-14 | 2021-11-23 | 2021-11-25 | | 2021-11-25 | 2021-11-29 | 2021-11-25 00:05:00 | 2021-11-30 | 2021-05-11 00:00:00.123456789 | 2021-05-12 | 2021-11-24 | 2021-11-25 | | 2021-11-24 | 2021-11-29 | 2021-11-24 00:06:00 | 2021-11-30 | 2021-06-11 00:00:00.123456789 | 2021-06-16 | 2021-11-25 | 2021-12-02 | | 2021-11-23 | 2021-11-29 | 2021-11-23 00:07:00 | 2021-11-30 | 2021-07-11 00:00:00.123456789 | 2021-07-14 | 2021-11-26 | 2021-12-02 | | 2021-11-22 | 2021-11-29 | 2021-11-22 00:08:00 | 2021-11-23 | 2021-08-11 00:00:00.123456789 | 2021-08-18 | 2021-11-27 | 2021-12-02 | | 2021-11-21 | 2021-11-22 | 2021-11-21 00:09:00 | 2021-11-23 | 2021-09-11 00:00:00.123456789 | 2021-09-15 | 2021-11-28 | 2021-12-02 | | 2021-11-20 | 2021-11-22 | 2021-11-20 00:10:00 | 2021-11-23 | 2021-10-11 00:00:00.123456789 | 2021-10-13 | 2021-11-29 | 2021-12-02 | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+------------+----------------+
NOW
構文
DATETIME NOW()説明
現在のシステムの日付と時刻を返します。
戻り値
DATETIME 型の値が返されます。 戻り値は
yyyy-mm-dd hh:mi:ss.SSS形式です。例
形式が指定されていません。 返される値のミリ秒部分は 1、2、または 3 ビットを含む場合があります。
SELECT NOW();次の結果が返されます。
+------+ | _c0 | +------+ | 2023-06-13 10:53:24.967 | +------+時刻形式が指定されています。
SELECT DATE_FORMAT(NOW(),'yyyy-MM-dd hh:mi:ss.SSS');次の結果が返されます。
+-----+ | _c0 | +-----+ | 2023-06-13 10:53:53.899 | +-----+
QUARTER
構文
INT QUARTER(DATETIME|TIMESTAMP|DATE|STRING <date>)説明
日付値が属する四半期を返します。 有効値:1 から 4。 この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は
yyyy-mm-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 | +------------+---------------+---------------------+-------------------+-------------------------------+--------------------+------------+---------------+
SECOND
構文
INT SECOND(DATETIME|TIMESTAMP|STRING <date>)説明
日付値の秒コンポーネントを返します。 この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date:必須。 DATETIME、TIMESTAMP、または STRING 型の日付値。 日付値は
yyyy-mm-dd hh:mi:ssまたはyyyy-mm-dd hh:mi:ss.ff3形式です。戻り値
INT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
date の値が DATETIME、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。
date の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 45 です。 SELECT SECOND('2014-09-01 12:30:45'); -- 戻り値は 45 です。 SELECT SECOND('12:30:45'); -- 戻り値は NULL です。 SELECT SECOND('20140901123045'); -- 戻り値は NULL です。 SELECT SECOND(null);テーブルデータの例
datetime1 および timestamp1 列の日付値の秒コンポーネントを取得します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT datetime1, SECOND(datetime1) AS datetime1_second, timestamp1, SECOND(timestamp1) AS timestamp1_second FROM mf_date_fun_t;次の結果が返されます。
+---------------------+------------------+-------------------------------+-------------------+ | datetime1 | datetime1_second | timestamp1 | timestamp1_second | +---------------------+------------------+-------------------------------+-------------------+ | 2021-11-29 00:01:00 | 0 | 2021-01-11 00:00:00.123456789 | 0 | | 2021-11-28 00:02:00 | 0 | 2021-02-11 00:00:00.123456789 | 0 | | 2021-11-27 00:03:00 | 0 | 2021-03-11 00:00:00.123456789 | 0 | | 2021-11-26 00:04:00 | 0 | 2021-04-11 00:00:00.123456789 | 0 | | 2021-11-25 00:05:00 | 0 | 2021-05-11 00:00:00.123456789 | 0 | | 2021-11-24 00:06:00 | 0 | 2021-06-11 00:00:00.123456789 | 0 | | 2021-11-23 00:07:00 | 0 | 2021-07-11 00:00:00.123456789 | 0 | | 2021-11-22 00:08:00 | 0 | 2021-08-11 00:00:00.123456789 | 0 | | 2021-11-21 00:09:00 | 0 | 2021-09-11 00:00:00.123456789 | 0 | | 2021-11-20 00:10:00 | 0 | 2021-10-11 00:00:00.123456789 | 0 | +---------------------+------------------+-------------------------------+-------------------+
TO_CHAR
構文
STRING TO_CHAR(DATETIME <date>, STRING <format>)説明
DATETIME 型の date 値を指定された format の文字列に変換します。
パラメーター
パラメーター
必須
説明
date
はい
DATETIME 型の日付値。 日付値は
yyyy-mm-dd hh:mi:ss形式です。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。format
はい
STRING 型の定数。 format の値では、日付形式部分が関連データに置き換えられ、他の文字は出力で変更されません。
戻り値
STRING 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
date の値が DATETIME または STRING 型でない場合、エラーが返されます。
date の値が null の場合、エラーが返されます。
format の値が null の場合、null が返されます。
例
静的データの例
例 1
--MaxCompute クライアントが Windows で実行されている場合、返される結果に中国語の文字が正しく表示されないことがあります。 SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00','Alibaba Finance yyyy-mm*dd');次の結果が返されます。
+------------+ | _c0 | +------------+ | Alibaba Finance 2010-12*03 | +------------+例 2
SELECT TO_CHAR(DATETIME '2008-07-18 00:00:00','yyyymmdd');次の結果が返されます。
+------------+ | _c0 | +------------+ | 20080718 | +------------+例 3
SET odps.sql.type.system.odps2=false; SELECT TO_CHAR('2008-07-18 00:00:00', 'yyyymmdd');次の結果が返されます。
+------------+ | _c0 | +------------+ | 20080718 | +------------+例 4
-- 'Alibaba 2010-12*3' は標準の日付値に変換できず、エラーが返されます。 SELECT TO_CHAR(DATETIME 'Alibaba 2010-12*3', 'Alibaba yyyy-mm*dd');例 5
--'20102401' は標準の日付値ではなく、エラーが返されます。 SELECT TO_CHAR(DATETIME '20102401', 'yyyy');例 6
SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00', null);次の結果が返されます。
+------------+ | _c0 | +------------+ | NULL | +------------+
テーブルデータの例
datetime1 列の日付値を指定された形式の文字列に変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
SELECT datetime1, TO_CHAR(datetime1,'yyyy-mm-dd') AS datetime1_to_char FROM mf_date_fun_t;次の結果が返されます。
+---------------------+-------------------+ | datetime1 | datetime1_to_char | +---------------------+-------------------+ | 2021-11-29 00:01:00 | 2021-11-29 | | 2021-11-28 00:02:00 | 2021-11-28 | | 2021-11-27 00:03:00 | 2021-11-27 | | 2021-11-26 00:04:00 | 2021-11-26 | | 2021-11-25 00:05:00 | 2021-11-25 | | 2021-11-24 00:06:00 | 2021-11-24 | | 2021-11-23 00:07:00 | 2021-11-23 | | 2021-11-22 00:08:00 | 2021-11-22 | | 2021-11-21 00:09:00 | 2021-11-21 | | 2021-11-20 00:10:00 | 2021-11-20 | +---------------------+-------------------+
TO_DATE
構文
DATETIME|DATE TO_DATE(STRING <date>[, STRING <format>])説明
文字列を指定された format の date 値に変換します。
パラメーター
パラメーター
必須
説明
date
はい
STRING 型の日付値。 このパラメーターは、変換する日付文字列を指定します。 入力値が BIGINT、DOUBLE、DECIMAL、または DATETIME データ型の場合、値は計算前に暗黙的に STRING 型の値に変換されます。 日付文字列は ISO 8601 形式にすることもできます。
format
いいえ
STRING 型の定数です。このパラメーターは日付形式を指定します。format は EDTF をサポートしていません。解析中、他の文字は無効な文字として省略されます。
値には
yyyyを含める必要があります。含まれていない場合、NULL が返されます。format に冗長なフォーマット文字列が存在する場合、この関数は最初のフォーマット文字列に対応する日付文字列を日付値に変換します。残りの文字列はデリミタと見なされます。たとえば、TO_DATE("1234-2234", "yyyy-yyyy")は1234-01-01 00:00:00を返します。yyyyは 4 桁の年を示します。mmは 2 桁の月を示します。ddは 2 桁の日を示します。hhは 24 時間形式の時を示します。miは 2 桁の分を示します。ssは 2 桁の秒を示します。ff3は 3 桁のミリ秒を示します。
戻り値
DATE または DATETIME 型の値が返されます。
format パラメーターが入力パラメーターに含まれておらず、変換する必要がある文字列が yyyy-mm-dd または
yyyy-mm-dd hh:mi:ss形式の場合、yyyy-mm-dd形式の DATE 型の値が返されます。 format パラメーターが入力パラメーターに含まれておらず、変換する必要がある文字列が yyyy-mm-dd または yyyy-mm-dd hh:mi:ss 形式でない場合、null が返されます。format パラメーターが入力パラメーターに含まれている場合、
yyyy-mm-dd hh:mi:ss形式の DATETIME 型の値が返されます。 date または format の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 2010-12-03 00:00:00 です。 SELECT TO_DATE('Alibaba 2010-12*03', 'Alibaba yyyy-mm*dd'); -- 戻り値は 2008-07-18 00:00:00 です。 SELECT TO_DATE('20080718', 'yyyymmdd'); -- 戻り値は 2008-07-18 20:30:00 です。 SELECT TO_DATE('200807182030','yyyymmddhhmi'); -- '2008718' は標準の日付値に変換できず、エラーが返されます。 値は '20080718' と記述する必要があります。 SELECT TO_DATE('2008718', 'yyyymmdd'); -- 'Alibaba 2010-12*3' は標準の日付値に変換できず、エラーが返されます。 値は 'Alibaba 2010-12*03' と記述する必要があります。 SELECT TO_DATE('Alibaba 2010-12*3', 'Alibaba yyyy-mm*dd'); -- '2010-24-01' は標準の日付値に変換できず、エラーが返されます。 値は '2010-01-24' と記述する必要があります。 SELECT TO_DATE('2010-24-01', 'yyyy-mm-dd'); -- 戻り値は 2018-10-30 15:13:12 です。 SELECT TO_DATE('20181030 15-13-12.345','yyyymmdd hh-mi-ss.ff3'); -- 戻り値は NULL です。 SELECT TO_DATE(null,'yyyymmdd hh-mi-ss.ff3'); -- 戻り値は NULL です。 SELECT TO_DATE('20181030 15-13-12.345', null); -- 入力値が ISO 8601 形式の場合、戻り値は 2021-09-24 13:39:34 です。 SELECT TO_DATE('2021-09-24T13:39:34.119Z', 'yyyy-MM-ddThh:mi:ss.ff3Z'); -- 戻り値は 2021-09-24 で、データ型は DATE です。 SELECT TO_DATE('2021-09-24'); -- 戻り値は 2021-09-24 で、データ型は DATE です。 SELECT TO_DATE('2021-09-24 13:39:34'); -- 戻り値は NULL です。 SELECT TO_DATE('20210924');テーブルデータの例
date3 列の日付値を指定された形式の日付値に変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
SELECT date3, TO_DATE(date3, 'yyyy-mm-dd') AS date3_to_date FROM mf_date_fun_t;次の結果が返されます。
+------------+---------------------+ | date3 | date3_to_date | +------------+---------------------+ | 2021-11-20 | 2021-11-20 00:00:00 | | 2021-11-21 | 2021-11-21 00:00:00 | | 2021-11-22 | 2021-11-22 00:00:00 | | 2021-11-23 | 2021-11-23 00:00:00 | | 2021-11-24 | 2021-11-24 00:00:00 | | 2021-11-25 | 2021-11-25 00:00:00 | | 2021-11-26 | 2021-11-26 00:00:00 | | 2021-11-27 | 2021-11-27 00:00:00 | | 2021-11-28 | 2021-11-28 00:00:00 | | 2021-11-29 | 2021-11-29 00:00:00 | +------------+---------------------+
TO_MILLIS
構文
BIGINT TO_MILLIS(DATETIME|TIMESTAMP <date>);説明
date 値をミリ秒単位で正確な UNIX タイムスタンプに変換します。 この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date:必須。 DATETIME または TIMESTAMP 型の日付値。 日付値は
yyyy-mm-dd hh:mi:ssまたはyyyy-mm-dd hh:mi:ss.ff3形式です。戻り値
BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
date の値が DATETIME または TIMESTAMP 型でない場合、エラーが返されます。
date の値が null の場合、エラーが返されます。
例
静的データの例
-- 戻り値は 1617174900000 です。 SELECT TO_MILLIS(datetime '2021-03-31 15:15:00'); -- 戻り値は 1617174900000 です。 SET odps.sql.type.system.odps2=true; SELECT TO_MILLIS(timestamp '2021-03-31 15:15:00');テーブルデータの例
datetime1 および timestamp1 列の日付値をミリ秒単位で正確な UNIX タイムスタンプに変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT datetime1, TO_MILLIS(datetime1) AS datetime1_to_millis, timestamp1, TO_MILLIS(timestamp1) AS timestamp1_to_millis FROM mf_date_fun_t;次の結果が返されます。
+---------------------+---------------------+-------------------------------+----------------------+ | datetime1 | datetime1_to_millis | timestamp1 | timestamp1_to_millis | +---------------------+---------------------+-------------------------------+----------------------+ | 2021-11-29 00:01:00 | 1638115260000 | 2021-01-11 00:00:00.123456789 | 1610294400123 | | 2021-11-28 00:02:00 | 1638028920000 | 2021-02-11 00:00:00.123456789 | 1612972800123 | | 2021-11-27 00:03:00 | 1637942580000 | 2021-03-11 00:00:00.123456789 | 1615392000123 | | 2021-11-26 00:04:00 | 1637856240000 | 2021-04-11 00:00:00.123456789 | 1618070400123 | | 2021-11-25 00:05:00 | 1637769900000 | 2021-05-11 00:00:00.123456789 | 1620662400123 | | 2021-11-24 00:06:00 | 1637683560000 | 2021-06-11 00:00:00.123456789 | 1623340800123 | | 2021-11-23 00:07:00 | 1637597220000 | 2021-07-11 00:00:00.123456789 | 1625932800123 | | 2021-11-22 00:08:00 | 1637510880000 | 2021-08-11 00:00:00.123456789 | 1628611200123 | | 2021-11-21 00:09:00 | 1637424540000 | 2021-09-11 00:00:00.123456789 | 1631289600123 | | 2021-11-20 00:10:00 | 1637338200000 | 2021-10-11 00:00:00.123456789 | 1633881600123 | +---------------------+---------------------+-------------------------------+----------------------+
TRUNC_TIME
コマンド形式
string TRUNC_TIME(date|datetime|timestamp|timestamp_ntz <date>, string <datepart>)説明
datepart で指定された時間単位に従って日付または時刻型のデータを切り捨て、STRING 型のデータを返します。
パラメーター
date:必須。 DATE、DATETIME、TIMESTAMP、または TIMESTAMP_NTZ 型をサポートします。 入力が STRING 型で、MaxCompute プロジェクトのデータ型バージョンが 1.0 の場合、計算前に暗黙的に DATETIME 型に変換されます。
datepart:必須。 STRING 型の定数で、大文字と小文字を区別せず、
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+8 の場合、ローカル時刻は datetime '2025-06-03 07:15:08' で、TRUNC_TIME 関数はまずローカル時刻を UTC 時刻 '2025-06-02 23:15:08' に変換し、次に datepart に従って切り捨て、結果を STRING 型として返します。
SET odps.sql.timezone=Asia/Shanghai; SELECT TRUNC_TIME(datetime '2025-06-03 07:15:08','year') as tc_year, TRUNC_TIME(datetime '2025-06-03 07:15:08','month') as tc_month, TRUNC_TIME(datetime '2025-06-03 07:15:08','day') as tc_date, TRUNC_TIME(datetime '2025-06-03 07:15:08','hour') as tc_hour;次の結果が返されます。
+------------+------------+------------+------------+ | tc_year | tc_month | tc_date | tc_hour | +------------+------------+------------+------------+ | 2025 | 2025-06 | 2025-06-02 | 2025-06-02 23:00:00 | +------------+------------+------------+------------+時刻が DATE 型の場合
たとえば、入力時刻が date '2025-06-10' の場合、TRUNC_TIME 関数は datepart で指定された時間単位に従って DATE 型のデータを切り捨て、STRING 型を返します。
SELECT TRUNC_TIME(date '2025-06-10','year' ), TRUNC_TIME(date '2025-06-10','month' ), TRUNC_TIME(date '2025-06-10','day' );次の結果が返されます。
+------------+------------+------------+ | _c0 | _c1 | _c2 | +------------+------------+------------+ | 2025 | 2025-06 | 2025-06-10 | +------------+------------+------------+時刻が STRING 型の場合
たとえば、入力時刻が STRING 型の '2025-06-03 15:30:30' の場合、計算前に暗黙的に DATETIME 型に変換されるように、MaxCompute プロジェクトのデータ型バージョンを 1.0 に設定する必要があります。 そうしないと、エラーが返されます。
SET odps.sql.type.system.odps2=false; SELECT TRUNC_TIME('2025-06-03 15:30:30','hour');次の結果が返されます。
+------------+ | _c0 | +------------+ | 2025-06-03 07:00:00 | +------------+
UNIX_TIMESTAMP
構文
BIGINT UNIX_TIMESTAMP(DATETIME|DATE|TIMESTAMP|STRING <date>)説明
date 値を整数である UNIX タイムスタンプに変換します。
パラメーター
date:必須。 DATETIME、DATE、TIMESTAMP、または STRING 型の日付値。 入力値は
yyyy-mm-dd hh:mi:ss、yyyy-mm-dd、またはyyyy-mm-dd hh:mi:ss.ff3形式です。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型の値に変換されます。 MaxCompute V1.0 データ型バージョンの詳細については、「データ型バージョン 1.0」をご参照ください。 MaxCompute V2.0 データ型バージョンを有効にすると、暗黙的な変換は失敗します。 この場合、CAST関数 (例:unix_timestamp(cast(... as datetime))) を使用してデータ型を変換する必要があります。 MaxCompute V2.0 データ型バージョンを無効にすることもできます。 MaxCompute V2.0 データ型バージョンの詳細については、「データ型バージョン 2.0」をご参照ください。説明入力値が定数であり、テーブルの値ではない場合、入力値は
DATETIME'yyyy-mm-dd hh:mi:ss'、DATE'yyyy-mm-dd'、またはTIMESTAMP'yyyy-mm-dd hh:mi:ss.ff3'形式です。 入力値にデータ型のキーワードが含まれておらず、'yyyy-mm-dd hh:mi:ss'形式の場合、入力値は STRING 型の値として認識されます。戻り値
BIGINT 型の UNIX タイムスタンプが返されます。 戻り値は、次のルールに基づいて変化します。
date の値が DATETIME、DATE、TIMESTAMP、または STRING 型でない場合、または形式が要件を満たしていない場合、エラーが返されるか、null が返されます。
date の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 1699585860 です。 SELECT UNIX_TIMESTAMP(DATETIME'2023-11-10 11:11:00'); -- 戻り値は 1699545600 です。 SET odps.sql.type.system.odps2=true; SELECT UNIX_TIMESTAMP(DATE'2023-11-10'); -- 戻り値は 1699585860 です。 SET odps.sql.type.system.odps2=true; SELECT UNIX_TIMESTAMP(TIMESTAMP'2023-11-10 11:11:00.123456789'); -- 戻り値は 1237518660 です。 SET odps.sql.type.system.odps2=false; SELECT UNIX_TIMESTAMP('2009-03-20 11:11:00'); -- 戻り値は NULL です。 SELECT UNIX_TIMESTAMP(null);テーブルデータの例
date1、datetime1、timestamp1 列の日付値を整数である UNIX タイムスタンプに変換します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
-- MaxCompute V2.0 データ型バージョンを有効にします。 次の SET ステートメントを SQL ステートメントと一緒にコミットします。 SET odps.sql.type.system.odps2=true; SELECT date1, UNIX_TIMESTAMP(date1) AS date1_unix_timestamp, datetime1, UNIX_TIMESTAMP(datetime1) AS datetime1_unix_timestamp, timestamp1, UNIX_TIMESTAMP(timestamp1) AS timestamp1_unix_timestamp FROM mf_date_fun_t;次の結果が返されます。
+------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+ | date1 | date1_unix_timestamp | datetime1 | datetime1_unix_timestamp | timestamp1 | timestamp1_unix_timestamp | +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+ | 2021-11-29 | 1638115200 | 2021-11-29 00:01:00 | 1638115260 | 2021-01-11 00:00:00.123456789 | 1610294400 | | 2021-11-28 | 1638028800 | 2021-11-28 00:02:00 | 1638028920 | 2021-02-11 00:00:00.123456789 | 1612972800 | | 2021-11-27 | 1637942400 | 2021-11-27 00:03:00 | 1637942580 | 2021-03-11 00:00:00.123456789 | 1615392000 | | 2021-11-26 | 1637856000 | 2021-11-26 00:04:00 | 1637856240 | 2021-04-11 00:00:00.123456789 | 1618070400 | | 2021-11-25 | 1637769600 | 2021-11-25 00:05:00 | 1637769900 | 2021-05-11 00:00:00.123456789 | 1620662400 | | 2021-11-24 | 1637683200 | 2021-11-24 00:06:00 | 1637683560 | 2021-06-11 00:00:00.123456789 | 1623340800 | | 2021-11-23 | 1637596800 | 2021-11-23 00:07:00 | 1637597220 | 2021-07-11 00:00:00.123456789 | 1625932800 | | 2021-11-22 | 1637510400 | 2021-11-22 00:08:00 | 1637510880 | 2021-08-11 00:00:00.123456789 | 1628611200 | | 2021-11-21 | 1637424000 | 2021-11-21 00:09:00 | 1637424540 | 2021-09-11 00:00:00.123456789 | 1631289600 | | 2021-11-20 | 1637337600 | 2021-11-20 00:10:00 | 1637338200 | 2021-10-11 00:00:00.123456789 | 1633881600 | +------------+----------------------+---------------------+--------------------------+------------------------------+---------------------------+
WEEKDAY
構文
BIGINT WEEKDAY(DATETIME <date>)説明
date 値が属する曜日を表す数値を返します。
パラメーター
date:必須。 DATETIME 型の値。 日付値は
yyyy-mm-dd hh:mi:ss形式である必要があります。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。戻り値
BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
月曜日は週の最初の日と見なされ、その戻り値は 0 です。 週の日は 0 から昇順に番号が付けられます。 日曜日の戻り値は 6 です。
date の値が DATETIME または STRING 型でない場合、または形式が要件を満たしていない場合、エラーが返されます。
date の値が null の場合、null が返されます。
例
静的データの例
-- 戻り値は 4 です。 SELECT WEEKDAY(datetime '2009-03-20 11:11:00'); -- 戻り値は 4 です。 SET odps.sql.type.system.odps2=false; SELECT WEEKDAY('2009-03-20 11:11:00'); -- 戻り値は NULL です。 SELECT WEEKDAY(null);テーブルデータの例
datetime1 列の各日付値が属する曜日を計算します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
SELECT datetime1, WEEKDAY(datetime1) AS datetime1_weekday FROM mf_date_fun_t;次の結果が返されます。
+---------------------+-------------------+ | datetime1 | datetime1_weekday | +---------------------+-------------------+ | 2021-11-29 00:01:00 | 0 | | 2021-11-28 00:02:00 | 6 | | 2021-11-27 00:03:00 | 5 | | 2021-11-26 00:04:00 | 4 | | 2021-11-25 00:05:00 | 3 | | 2021-11-24 00:06:00 | 2 | | 2021-11-23 00:07:00 | 1 | | 2021-11-22 00:08:00 | 0 | | 2021-11-21 00:09:00 | 6 | | 2021-11-20 00:10:00 | 5 | +---------------------+-------------------+
WEEKOFYEAR
構文
BIGINT WEEKOFYEAR(DATETIME <date>)説明
日付値が属する年の週を表す数値を返します。 月曜日は週の最初の日と見なされます。
説明週が現在の年に属するか、次の年に属するかを判断するには、週の 4 日以上が属する年を見つけます。 週が現在の年に属する場合、それはその年の最後の週と見なされます。 週が次の年に属する場合、それは次の年の最初の週と見なされます。
パラメーター
date:必須。 DATETIME 型の値。 日付値は
yyyy-mm-dd hh:mi:ss形式である必要があります。 入力値が STRING 型で、プロジェクトで MaxCompute V1.0 データ型バージョンが使用されている場合、入力値は計算前に暗黙的に DATETIME 型に変換されます。戻り値
BIGINT 型の値が返されます。 戻り値は、次のルールに基づいて変化します。
date の値が DATETIME または STRING 型でない場合、または形式が要件を満たしていない場合、null が返されます。
date の値が null の場合、null が返されます。
例
静的データの例
-- 値 1 が返されます。 20141229 は 2014 年ですが、週のほとんどの日が 2015 年に属します。 したがって、戻り値 1 は 2015 年の最初の週を示します。 SELECT WEEKOFYEAR(TO_DATE("20141229", "yyyymmdd")); -- 戻り値は 1 です。 SELECT WEEKOFYEAR(TO_DATE("20141231", "yyyymmdd")); -- 戻り値は 53 です。 SELECT WEEKOFYEAR(TO_DATE("20151229", "yyyymmdd")); -- 戻り値は 48 です。 SET odps.sql.type.system.odps2=false; SELECT WEEKOFYEAR('2021-11-29 00:01:00'); -- 戻り値は NULL です。 SELECT WEEKOFYEAR('20141231'); -- 戻り値は NULL です。 SELECT WEEKOFYEAR(null);テーブルデータの例
datetime1 列の各日付が属する年の何週目かを計算します。 この例では、「サンプルデータ」のデータが使用されます。 サンプルステートメント:
SELECT datetime1, WEEKOFYEAR(datetime1) AS datetime1_weekofyear FROM mf_date_fun_t;次の結果が返されます。
+---------------------+----------------------+ | datetime1 | datetime1_weekofyear | +---------------------+----------------------+ | 2021-11-29 00:01:00 | 48 | | 2021-11-28 00:02:00 | 47 | | 2021-11-27 00:03:00 | 47 | | 2021-11-26 00:04:00 | 47 | | 2021-11-25 00:05:00 | 47 | | 2021-11-24 00:06:00 | 47 | | 2021-11-23 00:07:00 | 47 | | 2021-11-22 00:08:00 | 47 | | 2021-11-21 00:09:00 | 46 | | 2021-11-20 00:10:00 | 46 | +---------------------+----------------------+
YEAR
構文
INT YEAR(DATETIME|TIMESTAMP|DATE|STRING <date>)説明
date 値が属する年を返します。 この関数は MaxCompute V2.0 の追加関数です。
パラメーター
date:必須。 DATETIME、TIMESTAMP、DATE、または STRING 型の日付値。 入力値は
yyyy-mm-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 に関するよくある質問の詳細については、次のトピックをご参照ください。
MaxCompute のビルトイン関数の一般的なエラーとよくある質問の詳細については、次のトピックをご参照ください。