このトピックでは、MaxComputeでサポートされている日付関数の構文とパラメーターについて説明します。 このトピックでは、日付関数の使用方法の例も示します。 適切な日付関数を選択して、ビジネス要件に基づいて日付の計算または変換を実行できます。
関数 | 説明 |
指定された日付に月数が追加された後に取得される日付値を返します。 | |
現在のタイムスタンプを返します。 | |
現在のシステムのタイムゾーンを返します。 | |
デルタで指定された間隔に基づいて、日付値に日数を加算または減算します。 毎日の増加または減少のみをサポートします。 DATE_ADD関数は、 | |
datepartで指定された時間単位とdeltaで指定された間隔に基づいて日付値を変更します。 年、月、日、時間、分、または秒の単位で増加または減少をサポートします。 | |
日付値を指定した形式の文字列に変換します。 | |
デルタで指定された間隔に基づいて、日付値に日数を加算または減算します。 DATE_SUB関数は、 | |
datepartで指定された時間単位に基づいて、2つの日付値の差を計算します。 | |
datepartで指定された時間単位に基づいて、日付値の指定されたコンポーネントを返します。 | |
datepartで指定された時間単位に基づいて日付値を切り捨てます。 | |
日付値が含まれる日を返します。 | |
日付値の日コンポーネントを返します。 | |
日付値が該当する曜日を返します。 | |
年のシーケンシャルな日を表す整数を返します。 | |
タイムスタンプの指定されたコンポーネントを返します。 | |
BIGINT型のUNIXタイムスタンプをDATETIME型の日付値に変換します。 | |
UTCタイムスタンプを指定されたタイムゾーンのタイムスタンプに変換します。 | |
現在のシステム時刻を日付値として返します。 | |
日付値の時間コンポーネントを返します。 | |
日付文字列を指定した形式の日付値に変換できるかどうかを指定します。 | |
日付値が該当する月の最終日を返します。 | |
日付値が該当する月の最終日を返します。 | |
日付値の分コンポーネントを返します。 | |
日付値が該当する月を返します。 | |
指定された日付値間の月数を返します。 | |
日付値より後で、指定された週と一致する最初の平日の日付を返します。 | |
現在のシステムの日付と時刻を返します。 | |
日付値が含まれる四半期を返します。 | |
日付値の2番目のコンポーネントを返します。 | |
日付値を指定した形式の文字列に変換します。 | |
文字列を指定した形式の日付値に変換します。 | |
日付値を、ミリ秒の精度のUNIXタイムスタンプに変換します。 | |
日付値を整数のUNIXタイムスタンプに変換します。 | |
日付値が該当する曜日を表す数値を返します。 | |
日付値が該当する年の週を表す数値を返します。 | |
日付値が含まれる年を返します。 |
注意事項
MaxCompute V2.0は追加機能を提供します。 使用する関数にMaxCompute V2.0データ型エディションでサポートされている新しいデータ型が含まれている場合は、SETステートメントを実行してMaxCompute V2.0データ型エディションを有効にする必要があります。 新しいデータ型には、TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、およびBINARYが含まれます。
セッションレベル: MaxCompute V2.0データ型エディションを使用するには、実行するsql文の前に
set odps. SQL. type.system.odps2=true;
を追加し、一緒にコミットして実行する必要があります。プロジェクトレベル: プロジェクトの所有者は、プロジェクトの要件に基づいて、プロジェクトのMaxCompute V2.0データ型エディションを有効にできます。 設定は10〜15分後に有効になります。 プロジェクトレベルでMaxCompute V2.0データ型エディションを有効にするには、次のコマンドを実行します。
setproject odps.sql.type.system.odps2=true;
setproject
の詳細については、「プロジェクト操作」をご参照ください。 プロジェクトレベルでMaxCompute V2.0データ型エディションを有効にする際の注意事項の詳細については、「データ型エディション」をご参照ください。
サンプルデータ
このセクションでは、日付関数の使用方法を理解するためのサンプルソースデータを提供します。 このトピックでは、mf_date_fun_tという名前のテーブルが作成され、データがテーブルに挿入されます。 サンプル文:
create table if not exists mf_date_fun_t(
id int,
date1 date,
datetime1 datetime,
timestamp1 timestamp,
date2 date,
datetime2 datetime,
timestamp2 timestamp,
date3 string,
date4 bigint);
insert into mf_date_fun_t values
(1,DATE'2021-11-29',DATETIME'2021-11-29 00:01:00',TIMESTAMP'2021-01-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-20',123456780),
(2,DATE'2021-11-28',DATETIME'2021-11-28 00:02:00',TIMESTAMP'2021-02-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-21',123456781),
(3,DATE'2021-11-27',DATETIME'2021-11-27 00:03:00',TIMESTAMP'2021-03-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-22',123456782),
(4,DATE'2021-11-26',DATETIME'2021-11-26 00:04:00',TIMESTAMP'2021-04-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-23',123456783),
(5,DATE'2021-11-25',DATETIME'2021-11-25 00:05:00',TIMESTAMP'2021-05-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-24',123456784),
(6,DATE'2021-11-24',DATETIME'2021-11-24 00:06:00',TIMESTAMP'2021-06-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-25',123456785),
(7,DATE'2021-11-23',DATETIME'2021-11-23 00:07:00',TIMESTAMP'2021-07-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-26',123456786),
(8,DATE'2021-11-22',DATETIME'2021-11-22 00:08:00',TIMESTAMP'2021-08-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-27',123456787),
(9,DATE'2021-11-21',DATETIME'2021-11-21 00:09:00',TIMESTAMP'2021-09-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-28',123456788),
(10,DATE'2021-11-20',DATETIME'2021-11-20 00:10:00',TIMESTAMP'2021-10-11 00:00:00.123456789',DATE'2021-10-29',DATETIME'2021-10-29 00:00:00',TIMESTAMP'2021-10-11 00:00:00.123456789','2021-11-29',123456789);
mf_date_fun_tテーブルからデータを照会します。 例:
SELECT * FROM mf_date_fun_t;
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
| id | date1 | datetime1 | timestamp1 | date2 | datetime2 | timestamp2 | date3 | date4 |
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
| 1 | 2021-11-29 | 2021-11-29 00:01:00 | 2021-01-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-20 | 123456780 |
| 2 | 2021-11-28 | 2021-11-28 00:02:00 | 2021-02-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-21 | 123456781 |
| 3 | 2021-11-27 | 2021-11-27 00:03:00 | 2021-03-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-22 | 123456782 |
| 4 | 2021-11-26 | 2021-11-26 00:04:00 | 2021-04-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-23 | 123456783 |
| 5 | 2021-11-25 | 2021-11-25 00:05:00 | 2021-05-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-24 | 123456784 |
| 6 | 2021-11-24 | 2021-11-24 00:06:00 | 2021-06-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-25 | 123456785 |
| 7 | 2021-11-23 | 2021-11-23 00:07:00 | 2021-07-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-26 | 123456786 |
| 8 | 2021-11-22 | 2021-11-22 00:08:00 | 2021-08-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-27 | 123456787 |
| 9 | 2021-11-21 | 2021-11-21 00:09:00 | 2021-09-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-28 | 123456788 |
| 10 | 2021-11-20 | 2021-11-20 00:10:00 | 2021-10-11 00:00:00.123 | 2021-10-29 | 2021-10-29 00:00:00 | 2021-10-11 00:00:00.123 | 2021-11-29 | 123456789 |
+------------+------------+---------------------+-------------------------+------------+---------------------+-------------------------+------------+------------+
ADD_MONTHS
構文
string add_months(date|datetime|timestamp|string <startdate>, int <num_months>)
説明
num_monthsで指定された月数がstartdateに追加された後の日付値を返します。 この関数は、MaxCompute V2.0の追加関数です。
パラメーター
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が返されます。
例
静的データの例
-- The return value is 2017-05-14. select add_months('2017-02-14',3); -- The return value is 0017-05-14. select add_months('17-2-14',3); -- The return value is 2017-05-14. select add_months('2017-02-14 21:30:00',3); -- The return value is null. select add_months('20170214',3); -- The return value is null. select add_months('2017-02-14 21:30:00',null);
テーブルデータの例
date1、datetime1、timestamp1、date3列のdate値を整数であるUNIX timestampに変換します。 この例では、サンプルデータのデータを使用します。 サンプル文:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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型の値が返されます。
例
-- The return value is '2017-08-03 11:50:30.661'. set odps.sql.type.system.odps2=true; select current_timestamp();
CURRENT_TIMEZONE
構文
string current_timezone()
説明
現在のシステムのタイムゾーンを返します。
戻り値
STRING型の値が返されます。
例
-- The return value is Asia/Shanghai. select current_timezone();
DATE_ADD
構文
date date_add(date|timestamp|string <startdate>, bigint <delta>)
説明
deltaで指定された日数を、startdateで指定された日付値に加算または減算します。 現在の時刻に日数を加算または減算するには、この関数をGETDATE関数と共に使用します。
この関数の論理は、DATE_SUB関数の論理と反対である。
パラメーター
startdate: 必須です。 開始日。 DATE、DATETIME、またはSTRING型の値がサポートされています。
入力値がSTRING型で、プロジェクトでMaxCompute V1.0データ型エディションが使用されている場合、入力値は計算前に暗黙的にDATE型に変換されます。 STRING型の入力値には、少なくとも
'yyyy-mm-dd
部分 ('2019-12-27 '
など) が含まれている必要があります。delta: 必須です。 加算または減算する日数。 このパラメーターの値は、BIGINT型である必要があります。 deltaの値が0より大きい場合、開始日に日数が追加されます。 deltaの値が0未満の場合、開始日から日数が差し引かれます。 deltaの値が0の場合、日付の値は変更されません。
戻り値
DATE型の値が返されます。 戻り値は
yyyy-mm-dd
形式です。 戻り値は、次のルールによって異なります。startdateの値がDATE型、DATETIME型、またはSTRING型でない場合、エラーが返されます。
startdateの値がnullの場合、エラーが返されます。
deltaの値がnullの場合、nullが返されます。
例
静的データの例
-- The return value is 2005-03-01. After one day is added, the result is beyond the last day of February. The first day of March is returned. select date_add(datetime '2005-02-28 00:00:00', 1); -- The return value is 2005-02-27. One day is subtracted. select date_add(date '2005-02-28', -1); -- The return value is 2005-03-20. set odps.sql.type.system.odps2=false; select date_add('2005-02-28 00:00:00', 20); -- If the current time is 2020-11-17 16:31:44, the return value is 2020-11-16. select date_add(getdate(),-1); -- The return value is null. select date_add('2005-02-28 00:00:00', null);
テーブルデータの例
deltaで指定した日数に基づいて、date1、datetime1、およびtimestamp1列の日付値を変更します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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で指定された間隔を加算または減算すると、より重要な日付でのキャリーまたはリターンのコンポーネントが発生する可能性があります。 年、月、時、分、および第2の部分は、それぞれ、基数10、基数12、基数24、および基数60の数値体系に従って計算されます。
DATEADD関数がdeltaで指定された間隔を日付値の月コンポーネントに追加し、この操作で日コンポーネントにオーバーフローが発生しない場合は、日コンポーネントの値を保持します。 それ以外の場合は、日コンポーネントの値を指定された月の最終日に設定します。
datepart: 必須です。 日付値で変更する日付部分。 値はSTRING型の定数です。 入力値の形式が無効であるか、入力値がSTRING型の定数でない場合、エラーが返されます。
このパラメーターの値は、STRING型とDATETIME型の間の変換規則に従って指定されます。 値
yyyy
は、日付値の年コンポーネントを示します。 値mm
は、日付値の月成分を示します。 値dd
は、日付値の日付コンポーネントを示します。 型変換のルールの詳細については、「型変換」をご参照ください。-year
、-month
、-mon
、-day
、-hour
などの拡張日付 /時刻フォーマット (EDTF) もサポートされています。
戻り値
DATE型またはDATETIME型の値が返されます。 戻り値は、
yyyy-mm-dd
またはyyyy-mm-dd hh:mi:ss
形式です。 戻り値は、次のルールによって異なります。dateの値がDATE型、DATETIME型、またはTIMESTAMP型でない場合、エラーが返されます。
dateの値がnullの場合、エラーが返されます。
deltaまたはdatepartの値がnullの場合、nullが返されます。
例
静的データの例
例1: 一般的な使用
-- The return value is 2005-03-01 00:00:00. After one day is added, the result is beyond the last day of February. The first day of March is returned. select dateadd(datetime '2005-02-28 00:00:00', 1, 'dd'); -- The return value is 2005-02-27 00:00:00. One day is subtracted. select dateadd(datetime '2005-02-28 00:00:00', -1, 'dd'); -- The return value is 2006-10-28 00:00:00. After 20 months are added, the month overflows, and the year value increases by 1. select dateadd(datetime '2005-02-28 00:00:00', 20, 'mm'); -- The return value is 2005-03-28 00:00:00. select dateadd(datetime '2005-02-28 00:00:00', 1, 'mm'); -- The return value is 2005-02-28 00:00:00. February in 2005 has only 28 days. Therefore, the last day of February is returned. select dateadd(datetime '2005-01-29 00:00:00', 1, 'mm'); -- The return value is 2005-02-28 00:00:00. select dateadd(datetime '2005-03-30 00:00:00', -1, 'mm'); -- The return value is 2005-03-18. select dateadd(date '2005-02-18', 1, 'mm'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 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'); -- If the current time is 2020-11-17 16:31:44, the return value is 2020-11-16 16:31:44. select dateadd(getdate(),-1,'dd'); -- The return value is null. select dateadd(date '2005-02-18', 1, null);
例2: DATETIME型の値が定数として表されるDATEADDの使用。
MaxCompute SQL文では、DATETIME型の値を直接定数として表すことはできません。 次のステートメントは、DATETIME型の値の無効な式を使用します。
select dateadd(2005-03-30 00:00:00, -1, 'mm');
DATETIME型の定数を記述するには、次のステートメントでDATETIME型の値の有効な式を使用します。
-- Explicitly convert a constant of the STRING type into the DATETIME type. The return value is 2005-02-28 00:00:00. select dateadd(cast("2005-03-30 00:00:00" as datetime), -1, 'mm');
例3: 入力値はSTRING型です。
-- The input value is of the STRING type but does not conform to the DATETIME-type format. As a result, an error is returned. select dateadd('2021-08-27',1,'dd'); -- The input value is of the STRING type and conforms to the DATETIME-type format, and the MaxCompute V1.0 data type edition is used in your project. The return value is 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列の日付値を変更します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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値を指定した形式の文字列に変換します。
パラメーター
date: 必須です。 変換する日付の値。 日付値は、date、TIMESTAMP、またはSTRINGタイプにすることができます。
Date型またはSTRING型のDATE値は、Hive互換データ型エディションが有効な場合にのみサポートされます。
se t odps.sql.hive.com patible=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型の定数。 このパラメータは、日付形式を指定します。 このパラメータは、日付形式を指定します。 例:
yyyy-MM-dd hh:mm:ss:SSS
およびyyyy-MM-dd hh:mi:ss:SSS
。 formatは、次のコンポーネントで構成されます。YYYY
またはyyyy
: 年。 yyyyは暦年を表し、YYYYは週の年を表します。説明週の年は実際の年と一致しない場合があります。 週の年形式を使用する場合は注意してください。
MM
: 月mm
: 分dd
: その日HH
: 24時間クロックで表される時間hh
: 12時間クロックで表される時間mi
: 分ss
: 2番目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が返されます。
例
静的データの例
-- Enable the Hive-compatible data type edition. Commit the following SET statement together with the SQL statement. set odps.sql.hive.compatible=true; -- If the current time is 2022-04-24 15:49, the return value is 2022-04-24 03:49:01.902. select date_format(from_utc_timestamp(current_timestamp(), 'UTC'),'yyyy-MM-dd hh:mm:ss.SSS'); -- The return value is 2022-04-24. select date_format('2022-04-24','yyyy-MM-dd');
テーブルデータの例
datetime1列とtimestamp1列の日付値を指定した形式の文字列に変換します。 この例では、サンプルデータのデータを使用します。 サンプル文:
-- Enable the Hive-compatible data type edition and the MaxCompute V2.0 data type edition. Commit the following SET statements together with the SQL statement. set odps.sql.hive.compatible=true; set odps.sql.type.system.odps2=true; select datetime1, timestamp1, date_format(datetime1,'yyyy/MM/dd'), date_format(datetime1,'yyyy/MM/dd HH:mm:ss'), date_format(timestamp1,'yyyy/MM/dd HH:mm:ss') from mf_date_fun_t;
次の応答が返されます。
+------------+------------+-----+-----+-----+ | datetime1 | timestamp1 | _c2 | _c3 | _c4 | +------------+------------+-----+-----+-----+ | 2021-11-29 00:01:00 | 2021-01-11 00:00:00.123456789 | 2021/11/29 | 2021/11/29 00:01:00 | 2021/01/11 00:00:00 | | 2021-11-28 00:02:00 | 2021-02-11 00:00:00.123456789 | 2021/11/28 | 2021/11/28 00:02:00 | 2021/02/11 00:00:00 | | 2021-11-27 00:03:00 | 2021-03-11 00:00:00.123456789 | 2021/11/27 | 2021/11/27 00:03:00 | 2021/03/11 00:00:00 | | 2021-11-26 00:04:00 | 2021-04-11 00:00:00.123456789 | 2021/11/26 | 2021/11/26 00:04:00 | 2021/04/11 00:00:00 | | 2021-11-25 00:05:00 | 2021-05-11 00:00:00.123456789 | 2021/11/25 | 2021/11/25 00:05:00 | 2021/05/11 00:00:00 | | 2021-11-24 00:06:00 | 2021-06-11 00:00:00.123456789 | 2021/11/24 | 2021/11/24 00:06:00 | 2021/06/11 00:00:00 | | 2021-11-23 00:07:00 | 2021-07-11 00:00:00.123456789 | 2021/11/23 | 2021/11/23 00:07:00 | 2021/07/11 00:00:00 | | 2021-11-22 00:08:00 | 2021-08-11 00:00:00.123456789 | 2021/11/22 | 2021/11/22 00:08:00 | 2021/08/11 00:00:00 | | 2021-11-21 00:09:00 | 2021-09-11 00:00:00.123456789 | 2021/11/21 | 2021/11/21 00:09:00 | 2021/09/11 00:00:00 | | 2021-11-20 00:10:00 | 2021-10-11 00:00:00.123456789 | 2021/11/20 | 2021/11/20 00:10:00 | 2021/10/11 00:00:00 | +------------+------------+-----+-----+-----+
DATE_SUB
構文
date date_sub(date|timestamp|string <startdate>, bigint <delta>)
説明
deltaで指定された日数を、startdateで指定された日付値に加算または減算します。 現在の時刻に日数を加算または減算するには、この関数をGETDATE関数と共に使用します。
この関数の論理は、DATE_ADD関数の論理と反対である。
パラメーター
startdate: 必須です。 開始日。 DATE、DATETIME、またはSTRING型の値がサポートされています。
入力値がSTRING型で、プロジェクトでMaxCompute V1.0データ型エディションが使用されている場合、入力値は計算前に暗黙的にDATE型に変換されます。 STRING型の入力値には、少なくとも
'yyyy-mm-dd
部分 ('2019-12-27 '
など) が含まれている必要があります。delta: 必須です。 加算または減算する日数。 このパラメーターの値は、BIGINT型である必要があります。 deltaの値が0より大きい場合、開始日から日数が差し引かれます。 deltaの値が0未満の場合、開始日に日数が追加されます。 deltaの値が0の場合、日付の値は変更されません。
戻り値
DATE型の値が返されます。 戻り値は
yyyy-mm-dd
形式です。 戻り値は、次のルールによって異なります。startdateの値がDATE型、DATETIME型、またはSTRING型でない場合、エラーが返されます。
startdateの値がnullの場合、エラーが返されます。
deltaの値がnullの場合、nullが返されます。
例
静的データの例
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. set odps.sql.type.system.odps2=true; -- The return value is 2005-02-28. One day is subtracted. The last day of February is returned. select date_sub(datetime '2005-03-01 00:00:00', 1); -- The return value is 2005-03-01. One day is added. select date_sub(date '2005-02-28', -1); -- The return value is 2005-02-27. Two days are subtracted. set odps.sql.type.system.odps2=false; select date_sub('2005-03-01 00:00:00', 2); -- If the current time is 2021-09-10 16:31:44, the return value is 2021-09-09. select date_sub(getdate(),1); -- The return value is null. select date_sub('2005-03-01 00:00:00', null);
テーブルデータの例
deltaで指定した日数に基づいて、date1、datetime1、およびtimestamp1列の日付値を変更します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. set odps.sql.type.system.odps2=true; select date1, date_sub(date1,1) as date1_date_sub, datetime1, date_sub(datetime1,-1) as datetime1_date_sub, timestamp1, date_sub(timestamp1,0) as timestamp1_date_sub from mf_date_fun_t;
次の応答が返されます。
+------------+----------------+---------------------+--------------------+-------------------------------+---------------------+ | date1 | date1_date_sub | datetime1 | datetime1_date_sub | timestamp1 | timestamp1_date_sub | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+ | 2021-11-29 | 2021-11-28 | 2021-11-29 00:01:00 | 2021-11-30 | 2021-01-11 00:00:00.123456789 | 2021-01-11 | | 2021-11-28 | 2021-11-27 | 2021-11-28 00:02:00 | 2021-11-29 | 2021-02-11 00:00:00.123456789 | 2021-02-11 | | 2021-11-27 | 2021-11-26 | 2021-11-27 00:03:00 | 2021-11-28 | 2021-03-11 00:00:00.123456789 | 2021-03-11 | | 2021-11-26 | 2021-11-25 | 2021-11-26 00:04:00 | 2021-11-27 | 2021-04-11 00:00:00.123456789 | 2021-04-11 | | 2021-11-25 | 2021-11-24 | 2021-11-25 00:05:00 | 2021-11-26 | 2021-05-11 00:00:00.123456789 | 2021-05-11 | | 2021-11-24 | 2021-11-23 | 2021-11-24 00:06:00 | 2021-11-25 | 2021-06-11 00:00:00.123456789 | 2021-06-11 | | 2021-11-23 | 2021-11-22 | 2021-11-23 00:07:00 | 2021-11-24 | 2021-07-11 00:00:00.123456789 | 2021-07-11 | | 2021-11-22 | 2021-11-21 | 2021-11-22 00:08:00 | 2021-11-23 | 2021-08-11 00:00:00.123456789 | 2021-08-11 | | 2021-11-21 | 2021-11-20 | 2021-11-21 00:09:00 | 2021-11-22 | 2021-09-11 00:00:00.123456789 | 2021-09-11 | | 2021-11-20 | 2021-11-19 | 2021-11-20 00:10:00 | 2021-11-21 | 2021-10-11 00:00:00.123456789 | 2021-10-11 | +------------+----------------+---------------------+--------------------+-------------------------------+---------------------+
DATEDIFF
構文
bigint datediff(date|datetime|timestamp <date1>, date|datetime|timestamp <date2>, string <datepart>)
説明
date1とdate2の差を計算します。 差は、datepartで指定された時間単位で測定されます。
パラメーター
date1およびdate2: 必須です。 マイナーエンドと減数。DATE、DATETIME、またはTIMESTAMPタイプです。 入力値がSTRING型で、プロジェクトでMaxCompute V1.0データ型エディションが使用されている場合、入力値は計算前に暗黙的にDATETIME型に変換されます。
説明MaxCompute V2.0データ型エディションのみがTIMESTAMP型をサポートしています。 詳細については、「MaxCompute V2.0データ型エディション」をご参照ください。
datepart: オプション。 時間単位。STRINGタイプの定数です。
MaxCompute V2.0データ型エディションを有効にした場合、datepartは空のままにできます。 デフォルト値: day。 MaxCompute V2.0データ型エディションの詳細については、「データ型エディション」をご参照ください。
-year
、-month
、-mon
、-day
、-hour
などのEDTFもサポートされています。説明この関数は、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式样,不能直接隐式转换,此处需进行显示转换 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列の値の差を計算します。 差は、指定された時間単位で測定される。 この例では、サンプルデータのデータを使用します。 サンプル文:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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
は、日付値の日付コンポーネントを示します。 型変換のルールの詳細については、「型変換」をご参照ください。-year
、-month
、-mon
、-day
、-hour
などの拡張日付 /時刻フォーマット (EDTF) もサポートされています。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
dateの値がDATE型、DATETIME型、またはTIMESTAMP型でない場合、エラーが返されます。
dateの値がnullの場合、エラーが返されます。
datepartの値がnullの場合、nullが返されます。
例
静的データの例
-- The return value is 2013. select datepart(datetime'2013-06-08 01:10:00', 'yyyy'); -- The return value is 6. select datepart(datetime'2013-06-08 01:10:00', 'mm'); -- The return value is 2013. select datepart(date '2013-06-08', 'yyyy'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 2013. set odps.sql.type.system.odps2=true; select datepart(timestamp '2013-06-08 01:10:00', 'yyyy'); -- The return value is 2013. set odps.sql.type.system.odps2=false; select datepart('2013-06-08 01:10:00', 'yyyy'); -- The return value is null. select datepart(date '2013-06-08', null);
テーブルデータの例
datepartで指定された時間単位に基づいて、date1、datetime1、およびtimestamp1列から日付値を抽出します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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
は、日付値の日付コンポーネントを示します。 型変換のルールの詳細については、「型変換」をご参照ください。-year
、-month
、-mon
、-day
、-hour
などの拡張日付 /時刻フォーマット (EDTF) もサポートされています。
戻り値
DATE型またはDATETIME型の値が返されます。 戻り値は、
yyyy-mm-dd
またはyyyy-mm-dd hh:mi:ss
形式です。 戻り値は、次のルールによって異なります。dateの値がDATE型、DATETIME型、またはTIMESTAMP型でない場合、エラーが返されます。
dateの値がnullの場合、エラーが返されます。
datepartの値がnullの場合、nullが返されます。
例
静的データの例
-- The return value is 2011-01-01 00:00:00. select datetrunc(datetime'2011-12-07 16:28:46', 'yyyy'); -- The return value is 2011-12-01 00:00:00. select datetrunc(datetime'2011-12-07 16:28:46', 'month'); -- The return value is 2011-12-07 00:00:00. select datetrunc(datetime'2011-12-07 16:28:46', 'DD'); -- The return value is 2011-01-01. select datetrunc(date '2011-12-07', 'yyyy'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 2011-01-01 00:00:00.0. set odps.sql.type.system.odps2=true; select datetrunc(timestamp '2011-12-07 16:28:46', 'yyyy'); -- The return value is 2011-01-01 00:00:00.0. set odps.sql.type.system.odps2=false; select datetrunc('2011-12-07 16:28:46', 'yyyy'); -- The return value is null. select datetrunc(date '2011-12-07', null);
テーブルデータの例
datepartで指定された時間単位に基づいて、date1、datetime1、およびtimestamp1列の日付値を切り捨てます。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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が返されます。
例
静的データの例
-- The value 1 is returned. select day('2014-09-01'); -- The return value is null. select day('20140901'); -- The return value is null. select day(null);
テーブルデータの例
date1、datetime1、timestamp1、date3列の各日付の値が該当する日を取得します。 この例では、サンプルデータのデータを使用します。 サンプル文:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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が返されます。
例
静的データの例
-- The return value is 1. select dayofmonth('2014-09-01'); -- The return value is null. select dayofmonth('20140901'); -- The return value is null. select dayofmonth(null);
テーブルデータの例
date1、datetime1、timestamp1、date3列の日付値の日付コンポーネントを取得します。 この例では、サンプルデータのデータを使用します。 サンプル文:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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 | +------------+------------------+---------------------+----------------------+-------------------------------+-----------------------+------------+------------------+
デイオフウィーク
構文
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は月曜日を示し、同じルールが他の値に適用されます。
例
-- The return value is 5. The return value indicates Thursday. 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が返されます。
例
-- The return value is 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に設定できる値。
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でない場合、エラーが返されます。
datepartの値がnullの場合、エラーが返されます。
dateの値がDATE、DATETIME、TIMESTAMP、またはSTRING型でない場合、またはnullの場合、nullが返されます。
例
静的データの例
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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; -- The following result is returned: +------+-------+------+------+--------+ | year | month | day | hour | minute | +------+-------+------+------+--------+ | 2019 | 5 | 1 | 11 | 21 | +------+-------+------+------+--------+ -- The return value is null. select extract(year from null);
テーブルデータの例
timestamp1列の日付値から指定された日付コンポーネントを抽出します。 この例では、サンプルデータのデータを使用します。 サンプル文:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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型の日付値。 このパラメータの値は2番目まで正確です。 有効な値: [-62167305600, 253402387200] 。
説明入力値がSTRING、DOUBLE、またはDECIMAL型で、プロジェクトでMaxCompute V1.0データ型エディションが使用されている場合、入力値は計算前に暗黙的にBIGINT型に変換されます。
戻り値
DATETIME型の値が返されます。 戻り値は
yyyy-mm-dd hh:mi:ss
形式です。 unixtimeの値がnullの場合、nullが返されます。説明se t odps.sql.hive.com patible=true;
コマンドを実行して、Hive互換データ型エディションを有効にします。 Hive互換データ型エディションでは、次のルールに注意してください。入力値がSTRING型の場合、STRING型の日付値が返されます。
2番目の入力パラメーターを指定して、戻り値の形式を決定できます。 たとえば、2番目の入力パラメーターの戻り値の日付と時刻の形式をyyyy-MM-ddまたはYYYY-MM-ddに指定できます。 yyyyは暦年を表し、YYYYは週の年を表します。 週の年は実際の年と一致しない場合があります。 週の年形式を使用する場合は注意してください。
例
静的データの例
-- The return value is 1973-11-30 05:33:09. select from_unixtime(123456789); -- The return value is 1973-11-30 05:33:09. set odps.sql.type.system.odps2=false; select from_unixtime('123456789'); -- The return value is 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 + 8x3600 = 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が返されます。
例
静的データの例
-- The time unit of the input value is accurate to the millisecond and the return value is 2017-08-01 04:24:00.0. select from_utc_timestamp(1501557840000, 'PST'); -- The return value is 1970-01-30 08:00:00.0. select from_utc_timestamp('1970-01-30 16:00:00','PST'); -- The return value is 1970-01-29 16:00:00.0. select from_utc_timestamp('1970-01-30','PST'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 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'); -- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with the SQL statement. The return value is 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'); -- The return value is null. select from_utc_timestamp('1970-01-30',null);
テーブルデータの例
datetime1列とtimestamp1列の日付値を指定したタイムゾーンのタイムスタンプに変換します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. set odps.sql.type.system.odps2=true; select datetime1, from_utc_timestamp(datetime1,'PST') pst, timestamp1, from_utc_timestamp(timestamp1,'Asia/Shanghai') asia from mf_date_fun_t;
次の応答が返されます。
+---------------------+---------------------+-------------------------------+-------------------------------+ | datetime1 | pst | timestamp1 | asia | +---------------------+---------------------+-------------------------------+-------------------------------+ | 2021-11-29 00:01:00 | 2021-11-28 16:01:00 | 2021-01-11 00:00:00.123456789 | 2021-01-11 08:00:00.123456789 | | 2021-11-28 00:02:00 | 2021-11-27 16:02:00 | 2021-02-11 00:00:00.123456789 | 2021-02-11 08:00:00.123456789 | | 2021-11-27 00:03:00 | 2021-11-26 16:03:00 | 2021-03-11 00:00:00.123456789 | 2021-03-11 08:00:00.123456789 | | 2021-11-26 00:04:00 | 2021-11-25 16:04:00 | 2021-04-11 00:00:00.123456789 | 2021-04-11 08:00:00.123456789 | | 2021-11-25 00:05:00 | 2021-11-24 16:05:00 | 2021-05-11 00:00:00.123456789 | 2021-05-11 08:00:00.123456789 | | 2021-11-24 00:06:00 | 2021-11-23 16:06:00 | 2021-06-11 00:00:00.123456789 | 2021-06-11 08:00:00.123456789 | | 2021-11-23 00:07:00 | 2021-11-22 16:07:00 | 2021-07-11 00:00:00.123456789 | 2021-07-11 08:00:00.123456789 | | 2021-11-22 00:08:00 | 2021-11-21 16:08:00 | 2021-08-11 00:00:00.123456789 | 2021-08-11 08:00:00.123456789 | | 2021-11-21 00:09:00 | 2021-11-20 16:09:00 | 2021-09-11 00:00:00.123456789 | 2021-09-11 08:00:00.123456789 | | 2021-11-20 00:10:00 | 2021-11-19 16:10:00 | 2021-10-11 00:00:00.123456789 | 2021-10-11 08:00:00.123456789 | +---------------------+---------------------+-------------------------------+-------------------------------+
GETDATE
構文
datetime getdate()
説明
現在のシステム時刻を日付値として返します。 MaxComputeはUTC + 8を標準タイムゾーンとして使用します。
戻り値
DATETIME型の現在の日付と時刻が返されます。
説明MaxCompute SQLでは、
GETDATE
は常に固定値を返します。 戻り値は、MaxCompute SQLタスクの実行中の任意の時間です。 時間の精度は、秒単位です。 MaxCompute V2.0データ型エディションを有効にした場合、時間はミリ秒の精度です。
HOUR
構文
int hour(datetime|timestamp|string <date>)
説明
日付値の時間コンポーネントを返します。
パラメーター
date: 必須です。 DATETIME、TIMESTAMP、またはSTRING型の日付値。 日付の値は、
yyyy-mm-dd hh:mi:ss
形式またはyyyy-mm-dd hh:mi:ss.ff3
形式です。 値がSTRING型の場合、値には少なくともyyyy-mm-dd
部分を含める必要があり、余分な文字列を含めることはできません。 この関数は、MaxCompute V2.0の追加関数です。戻り値
INT型の値が返されます。 戻り値は、次のルールによって異なります。
dateの値がDATETIME、TIMESTAMP、またはSTRING型でない場合、または形式が要件を満たしていない場合は、nullが返されます。
dateの値がnullの場合、nullが返されます。
例
静的データの例
-- The return value is 12. select hour('2014-09-01 12:00:00'); -- The return value is 12. select hour('12:00:00'); -- The return value is null. select hour('20140901120000'); -- The return value is null. select hour(null);
テーブルデータの例
datetime1およびtimestamp1列の日付値の時間コンポーネントを取得します。 この例では、サンプルデータのデータを使用します。 サンプル文:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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-yyy")
はtrueを返します。
戻り値
BOOLEAN型の値が返されます。 dateまたはformatの値がnullの場合、nullが返されます。
例
静的データの例
-- The return value is true. select isdate('2021-10-11','yyyy-mm-dd'); -- The return value is 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の場合、エラーが返されます。
例
静的データの例
-- The return value is 2017-03-31. select last_day('2017-03-04'); -- The return value is 2017-07-31. select last_day('2017-07-04 11:40:00'); -- The return value is null. select last_day('20170304');
テーブルデータの例
date1、datetime1、timestamp1、およびdate3列の各日付値が該当する月の最終日を取得します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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値が該当する月の最終日を返します。 dayコンポーネントのみが切り捨てられます。 時、分、および秒の成分は、
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が返されます。
例
静的データの例
-- The return value is 2013-06-30 00:00:00. select lastday (datetime '2013-06-08 01:10:00'); -- The return value is 2013-06-30 00:00:00. set odps.sql.type.system.odps2=false; select lastday ('2013-06-08 01:10:00'); -- The return value is 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が返されます。
例
静的データの例
-- The return value is 30. select minute('2014-09-01 12:30:00'); -- The return value is 30. select minute('12:30:00'); -- The return value is null. select minute('20140901120000'); -- The return value is null. select minute(null);
テーブルデータの例
datetime1およびtimestamp1列の日付値の分コンポーネントを取得します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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が返されます。
例
静的データの例
-- The return value is 9. select month('2014-09-01'); -- The return value is null. select month('20140901'); -- The return value is null. select month(null);
テーブルデータの例
date1、datetime1、timestamp1、date3列の各日付値の月コンポーネントを取得します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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が返されます。
例
静的データの例
-- The return value is 3.9495967741935485. select months_between('1997-02-28 10:30:00', '1996-10-30'); -- The return value is -3.9495967741935485. select months_between('1996-10-30','1997-02-28 10:30:00' ); -- The return value is -3.0. select months_between('1996-09-30','1996-12-31'); -- The return value is null. select months_between('1996-09-30',null);
テーブルデータの例
timestamp1列とtimestamp2列の日付値間の月数を計算します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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: 必須です。 TIMESTAMP、DATE、DATETIME、または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が返されます。
例
静的データの例
-- The return value is 2017-08-08. select next_day('2017-08-01','TU'); -- The return value is 2017-08-08. select next_day('2017-08-01 23:34:00','TU'); -- The return value is null. select next_day('20170801','TU'); -- The return value is null. select next_day('2017-08-01 23:34:00',null);
テーブルデータの例
date1、datetime1、timestamp1、date3列の各日付値が対応する次の週の日付を取得します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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:mm:ss.SSS') ;
次の応答が返されます。
+-----+ | _c0 | +-----+ | 2023-06-13 10:53:53.899 | +-----+
QUARTER
構文
int quarter (datetime|timestamp|date|string <date>)
説明
日付値が含まれる四半期を返します。 有効な値:0〜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が返されます。
例
静的データの例
-- The return value is 4. select quarter('1970-11-12 10:00:00'); -- The return value is 4. select quarter('1970-11-12'); -- The return value is null. select quarter(null);
テーブルデータの例
date1、datetime1、timestamp1、およびdate3列の各日付値が含まれる四半期を取得します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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>)
説明
日付値の2番目のコンポーネントを返します。 この関数は、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が返されます。
例
静的データの例
-- The return value is 45. select second('2014-09-01 12:30:45'); -- The return value is 45. select second('12:30:45'); -- The return value is null. select second('20140901123045'); -- The return value is null. select second(null);
テーブルデータの例
datetime1列とtimestamp1列の日付値の2番目のコンポーネントを取得します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. set odps.sql.type.system.odps2=true; elect 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値を指定した形式の文字列に変換します。
パラメーター
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
--If the MaxCompute client runs in Windows, Chinese characters may not be properly displayed in the returned result. SELECT TO_CHAR(DATETIME '2010-12-03 00:00:00','Alibaba Cloud Financial Services yyyy-mm*dd');
次の応答が返されます。
+------------+ | _c0 | +------------+ | Alibaba Cloud Financial Services 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' cannot be converted into a standard date value, and an error is returned. The value must be written as 'Alibaba 2010-12*03'。 SELECT TO_CHAR(datetime'Alibaba 2010-12*3', 'Alibaba yyyy-mm*dd');
例 5
--'20102401' is not a standard DATETIME value, and an error is returned. The value must be written as '2010-01-24 00:00:00'。 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>])
説明
文字列を指定した形式の日付値に変換します。
パラメーター
date: 必須です。 STRING型の日付値。 このパラメータは、変換する日付文字列を指定します。 入力値がBIGINT、DOUBLE、DECIMAL、またはDATETIMEのデータ型の場合、計算前に値が暗黙的にSTRING型の値に変換されます。 日付文字列は、ISO 8601形式にすることもできます。
format: オプション。 STRING型の定数。 このパラメータは、日付形式を指定します。 formatは、拡張日時形式 (EDTF) をサポートしていません。 その他の文字は、解析中に無効な文字として省略されます。
formatの値には
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が返されます。
例
静的データの例
-- The return value is 2010-12-03 00:00:00. select to_date('Alibaba 2010-12*03', 'Alibaba yyyy-mm*dd') -- The return value is 2008-07-18 00:00:00. select to_date('20080718', 'yyyymmdd'); -- The return value is 2008-07-18 20:30:00. select to_date('200807182030','yyyymmddhhmi'); -- '2008718' cannot be converted to a standard date value, and an error is returned. The value must be written as '20080718'. select to_date('2008718', 'yyyymmdd'); -- 'Alibaba 2010-12*3' cannot be converted into a standard date value, and an error is returned. The value must be written as 'Alibaba 2010-12*03'. select to_date('Alibaba 2010-12*3', 'Alibaba yyyy-mm*dd'); -- '2010-24-01' cannot be converted into a standard date value, and an error is returned. The value must be written as '2010-01-24'. select to_date('2010-24-01', 'yyyy-mm-dd'); -- The return value is 2018-10-30 15:13:12. select to_date('20181030 15-13-12.345','yyyymmdd hh-mi-ss.ff3'); -- The return value is null. select to_date(null,'yyyymmdd hh-mi-ss.ff3'); -- The return value is null. select to_date('20181030 15-13-12.345',null); -- If the input value is in the ISO 8601 format, the return value is 2021-09-24 13:39:34. select to_date('2021-09-24T13:39:34.119Z', 'yyyy-MM-ddThh:mi:ss.ff3Z'); -- The return value is 2021-09-24, and the data type is DATE. select to_date('2021-09-24'); -- The return value is 2021-09-24, and the data type is DATE. select to_date('2021-09-24 13:39:34'); -- The return value is 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の場合、エラーが返されます。
例
静的データの例
-- The return value is 1617174900000. select to_millis(datetime '2021-03-31 15:15:00'); -- The return value is 1617174900000. set odps.sql.type.system.odps2=true; select to_millis(timestamp '2021-03-31 15:15:00');
テーブルデータの例
datetime1列とtimestamp1列の日付値を、ミリ秒の精度のUNIXタイムスタンプに変換します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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 | +---------------------+---------------------+-------------------------------+----------------------+
UNIX_TIMESTAMP
構文
bigint unix_timestamp(datetime|date|timestamp|string <date>)
説明
date値を整数のUNIXタイムスタンプに変換します。
パラメーター
date: 必須です。 DATETIME、date、TIMESTAMP、またはSTRING型の日付値。 入力値は、
yyyy-mm-dd hh:mi:ss
、yyyy-mm-dd
、またはyyyy-mm-dd hh:mi:ss.ff3
形式です。 入力値がSTRING型で、プロジェクトでMaxCompute V1.0データ型エディションが使用されている場合、入力値は計算前に暗黙的にDATETIME型の値に変換されます。 MaxCompute V1.0データ型エディションの詳細については、「MaxCompute V1.0データ型エディション」をご参照ください。 MaxCompute V2.0データ型エディションを有効にすると、暗黙の変換は失敗します。 この場合、データ型を変換するには、unix_timestamp (CAST (... as datetime))
などのcast
関数を使用する必要があります。 MaxCompute V2.0データ型エディションを無効にすることもできます。 MaxCompute V2.0データ型エディションの詳細については、「MaxCompute V2.0データ型エディション」をご参照ください。説明入力値が定数で、テーブルの値ではない場合、入力値は
DATETIME'yyy-mm-dd hh:mi:ss'
、DATE'yyy-mm-dd'
、またはTIMESTAMP'yyy-mm-dd hh:mi:ss.ff3'
形式になります。 入力値にデータ型のキーワードが含まれておらず、'yyyy-mm-dd hh:mi:ss'
形式の場合、入力値はSTRING型の値として認識されます。戻り値
BIGINT型のUNIXタイムスタンプが返されます。 戻り値は、次のルールによって異なります。
dateの値がDATETIME、DATE、TIMESTAMP、またはSTRING型でない場合、または形式が要件を満たしていない場合は、エラーが返されるか、nullが返されます。
dateの値がnullの場合、nullが返されます。
例
静的データの例
-- The return value is 1699585860. SELECT unix_timestamp(DATETIME'2023-11-10 11:11:00'); -- The return value is 1699545600. set odps.sql.type.system.odps2=true; SELECT unix_timestamp(DATE'2023-11-10'); -- The return value is 1699585860. set odps.sql.type.system.odps2=true; SELECT unix_timestamp(TIMESTAMP'2023-11-10 11:11:00.123456789'); -- The return value is 1237518660. set odps.sql.type.system.odps2=false; select unix_timestamp('2009-03-20 11:11:00'); -- The return value is null. select unix_timestamp(null);
テーブルデータの例
date1列、datetime1列、およびtimestamp1列のdate値を整数のUNIXタイムスタンプに変換します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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が返されます。
例
静的データの例
-- The return value is 4. select weekday (datetime '2009-03-20 11:11:00'); -- The return value is 4. set odps.sql.type.system.odps2=false; select weekday ('2009-03-20 11:11:00'); -- The return value is 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が返されます。
例
静的データの例
-- The return value is 1. 20141229 is in year 2014, but most days of the week fall in year 2015. Therefore, the return value 1 indicates the first week of year 2015. select weekofyear(to_date("20141229", "yyyymmdd")); -- The return value is 1. select weekofyear(to_date("20141231", "yyyymmdd")); -- The return value is 53. select weekofyear(to_date("20151229", "yyyymmdd")); -- The return value is 48. set odps.sql.type.system.odps2=false; select weekofyear('2021-11-29 00:01:00'); -- The return value is null. select weekofyear('20141231'); -- The return value is null. select weekofyear(null);
テーブルデータの例
datetime1列の各日付が属する年のn番目の週を計算します。 この例では、サンプルデータのデータを使用します。 例:
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が返されます。
例
静的データの例
-- The return value is 1970. select year('1970-01-01 12:30:00'); -- The return value is 1970. select year('1970-01-01'); -- The return value is 70. select year('70-01-01'); -- The return value is null. select year('1970/03/09'); -- The return value is null. select year(null);
テーブルデータの例
date1、datetime1、timestamp1、date3列の各日付値が該当する年を取得します。 この例では、サンプルデータのデータを使用します。 例:
-- Enable the MaxCompute V2.0 data type edition. Commit the following SET statement together with SQL statements. 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に関するFAQの詳細については、以下のトピックを参照してください。
MaxComputeの組み込み関数に関する一般的なエラーとFAQの詳細については、以下のトピックを参照してください。