このトピックでは、Hologres でサポートされている日付と時刻の関数について説明し、関数の使用方法の例を示します。
タイプ | 関数 | 機能 |
データ型変換関数 | 年、月、日で構成される日付を作成します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。 | |
タイムスタンプ、整数、実数、または倍精度浮動小数点数を文字列に変換します。 | ||
文字列を日付に変換します。デフォルトでは、1925 年から 2282 年までの日付を表す文字列のみを変換できます。 | ||
文字列をタイムスタンプに、またはタイムスタンプを日付に変換します。 | ||
日付と時刻の値に対する基本操作のための関数と演算子 | 指定した日付に特定の月数を追加します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。 | |
指定された日付と時刻の値に、指定された時間単位に基づいて間隔を加算または減算します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。 | ||
2 つの日付またはタイムスタンプの差を計算します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。 | ||
2 つの日付の間の月数を返します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。 | ||
指定した日付より後の、指定した曜日の最初の日付を返します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。 | ||
日数または時刻を加算します。 | ||
日数または時刻を減算します。 | ||
日数または時刻を乗算します。 | ||
日数または時刻を除算します。 | ||
日付と時刻の切り捨て関数 | タイムスタンプから年、月、日、時などの特定の部分を抽出します。この関数は EXTRACT 関数と同等です。 | |
日付と時刻のデータを指定された時間単位に切り捨てます。 | ||
タイムスタンプから年、月、日、時などの特定の部分を抽出します。 | ||
日付値が属する月の最終日を返します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。 | ||
日付値が属する月の最終日を返します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。 | ||
日付を、時間単位に基づいて最も近い値に丸めます。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。 | ||
日付またはタイムスタンプを指定された時間単位に切り捨てます。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。 | ||
現在の日付と時刻の取得関数 | 現在の日付と時刻を返します。 | |
現在の日付を返します。 | ||
現在のトランザクションの開始時刻を返します。この関数は TRANSACTION_TIMESTAMP 関数または NOW 関数と同等です。 | ||
タイムゾーン情報を含まない現在の時刻を返します。 | ||
現在のトランザクションの開始時刻を返します。この関数は TRANSACTION_TIMESTAMP 関数または CURRENT_TIMESTAMP 関数と同等です。 | ||
現在のステートメントの開始時刻を返します。 | ||
現在の日付と時刻を返します。この関数は CLOCK_TIMESTAMP 関数に似ています。TIMEOFDAY 関数によって返される値は、フォーマットされたテキスト文字列です。 | ||
現在のトランザクションの開始時刻を返します。この関数は CURRENT_TIMESTAMP 関数または NOW 関数と同等です。 | ||
その他 | DATE 型の日付が有限数であるかどうかを確認します。 |
日付と時刻の変換関数
TO_CHAR
説明:
タイムスタンプを文字列に変換します。デフォルトでは、1925 年から 2282 年までの時点を表すタイムスタンプのみを変換できます。
TO_CHAR(TIMESTAMP|TIMESTAMPTZ, TEXT)使用上の注意:
この関数を使用して、タイムスタンプを 24 時間制または 12 時間制の文字列に変換できます。HH24 は 24 時間制を、HH12 は 12 時間制を示します。デフォルトでは、12 時間制が使用されます。
YYYYは年に対応し、MMは月、DDは日、HHは時、MIは分、SSは秒に対応します。Hologres V1.1.31 以降では、SQL 文の前に
set hg_experimental_functions_use_pg_implementation = 'to_char';またはset hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';を実行して、すべての時間範囲をサポートできます。説明上記のステートメントのいずれかを実行して GUC パラメーターを設定すると、クエリのパフォーマンスが約 50% 低下します。Hologres V1.1.42 以降では、クエリのパフォーマンスが約 20% 低下します。
整数を文字列に変換します。
TO_CHAR(INT, TEXT)実数または倍精度浮動小数点数を文字列に変換します。
TO_CHAR(DOUBLE PRECISION, TEXT)
戻り値:
TEXT 型の値が返されます。
例:
タイムスタンプを 24 時間制の文字列に変換します。
-- 戻り値: 13:48:30. SELECT TO_CHAR(current_timestamp, 'HH24:MI:SS'); -- 戻り値: 2024-08-05. SELECT TO_CHAR(current_timestamp, 'YYYY-MM-DD');タイムスタンプを 12 時間制の文字列に変換します。
-- 戻り値: 01:50:42 PM. SELECT TO_CHAR(current_timestamp, 'HH12:MI:SS AM'); -- 戻り値: 12:30:00 AM. SELECT TO_CHAR(time '00:30:00', 'HH12:MI:SS AM');次の結果が返されます。
CREATE TABLE time_test( a text, b TIMESTAMPTZ ); INSERT INTO time_test VALUES ('2001-09-28 03:00:00','2004-10-19 10:23:54+08'); -- 戻り値:10:23:54。 SELECT TO_CHAR(b, 'HH24:MI:SS') FROM time_test; -- TEXT 型の値を日付に変換します。戻り値:2001-09-28。 SELECT TO_CHAR(to_timestamp(a, 'YYYY-MM-DD'),'YYYY-MM-DD')FROM time_test;タイムスタンプを別のタイムゾーンの文字列に変換します。
CREATE TABLE timestamptz_test( a TIMESTAMPTZ); INSERT INTO timestamptz_test VALUES ('2023-03-21 10:23:54+02');タイムゾーンが指定されていない場合、a フィールドのタイムスタンプ値は UTC+8 タイムゾーンを使用する文字列に変換されます。
-- 戻り値: 2023-03-21 16:23:54. SELECT TO_CHAR(a, 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;a フィールドのタイムスタンプ値を UTC-5 タイムゾーンを使用する文字列に変換します。
-- 戻り値: 2023-03-21 04:23:54. SELECT TO_CHAR(a at time zone 'US/Eastern', 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;
整数を文字列に変換します。
-- 戻り値: 125. SELECT TO_CHAR(125, '999');倍精度浮動小数点数を文字列に変換します。
-- 戻り値: 125.8. SELECT TO_CHAR(125.8::real, '999D9');
TO_DATE
説明: 文字列を日付に変換します。デフォルトでは、1925 年から 2282 年までの日付を表す文字列のみを変換できます。
TO_DATE(<text_date> TEXT, <format_mask> TEXT)使用上の注意:
Hologres V1.1.31 以降では、SQL 文の前に
set hg_experimental_functions_use_pg_implementation = 'to_date';またはset hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';を実行して、すべての時間範囲をサポートできます。説明上記のステートメントのいずれかを実行して GUC パラメーターを設定すると、クエリのパフォーマンスが約 50% 低下します。Hologres V1.1.42 以降では、クエリのパフォーマンスが約 20% 低下します。
パラメーター:
text_date: 必須。変換する文字列。
format_mask: 必須。日付形式。
戻り値:
TEXT 型の値が返されます。
例:
文字列を日付に変換します。
-- 戻り値: 2000-12-05. SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY'); -- 戻り値: 2001-03-24. SELECT TO_DATE('2001 03 24', 'YYYY-MM-DD');TEXT データ型のフィールドの値を日付に変換します。
CREATE TABLE time_test(a TEXT); INSERT INTO time_test VALUES ('2001-0928 03:00:00'); SELECT TO_DATE(a, 'YYYY-MM-DD') FROM time_test;次の結果が返されます。
to_date ------------ 2001-09-28
TO_TIMESTAMP
説明:
文字列をタイムスタンプに変換します。デフォルトでは、1925 年から 2282 年までの時点を表す文字列のみを変換できます。
TO_TIMESTAMP(<text_date> TEXT, <format_mask> TEXT)使用上の注意:
戻り値には +08 が含まれます。
Hologres V1.1.31 以降では、SQL 文の前に
set hg_experimental_functions_use_pg_implementation = 'to_timestamp';またはset hg_experimental_functions_use_pg_implementation = 'to_char,to_date,to_timestamp';を実行して、すべての時間範囲をサポートできます。説明上記のステートメントのいずれかを実行して GUC パラメーターを設定すると、クエリのパフォーマンスが約 50% 低下します。Hologres V1.1.42 以降では、クエリのパフォーマンスが約 20% 低下します。
パラメーター:
text_date: 必須。タイムスタンプに変換する文字列。
format_mask: 必須。タイムスタンプ形式。
タイムスタンプを日付に変換します。
TO_TIMESTAMP(DOUBLE PRECISION)説明UNIX タイムスタンプは、1970 年 1 月 1 日 00:00:00 から経過した秒数を表します。
戻り値:
TIMESTAMPTZ 型の値が返されます。
例:
文字列をタイムスタンプに変換します。
SELECT TO_TIMESTAMP('05 Dec 2000', 'DD Mon YYYY');次の結果が返されます。
to_timestamp ------------------------ 2000-12-05 00:00:00+08TEXT データ型の文字列をタイムスタンプに変換します。
CREATE TABLE time_test(a TEXT); INSERT INTO time_test VALUES ('2001-09-28 03:00:00'); SELECT TO_TIMESTAMP(a, 'YYYY-MM-DD') FROM time_test;次の結果が返されます。
to_timestamp ------------------------ 2001-09-28 00:00:00+08秒単位の UNIX タイムスタンプを日付に変換します。
-- 戻り値: 1975-03-06 03:38:16+08. SELECT TO_TIMESTAMP(163280296);ミリ秒単位の UNIX タイムスタンプを日付に変換します。
-- 戻り値: 2021-09-28 12:22:41+08. SELECT TO_TIMESTAMP(1632802961000/1000);
MAKE_DATE
説明: 年、月、日で構成される日付を作成します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。
MAKE_DATE(<year> INT, <month> INT, <day> INT)使用上の注意:
Hologres V2.0.29 以降でこの関数がサポートされています。この関数は、入力パラメーターとして定数をサポートしていません。
戻り値:
DATE 型の値が返されます。
例:
-- 戻り値: 2013-07-15. SELECT MAKE_DATE(2013, 7, 15);次の結果が返されます。
make_date ------------ 2013-07-15
日付と時刻の値に対する基本操作のための関数と演算子
DATEADD
説明: 指定された日付と時刻の値に、指定された時間単位に基づいて間隔を加算または減算します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。
DATEADD(<d> DATE|TIMESTAMP|TIMESTAMPTZ, <num> BIGINT, <str> TEXT)使用上の注意:
次のバージョンの Hologres インスタンスでこの関数がサポートされています。
V2.0.31 から V2.1.0
V2.1.13 以降
説明この関数は、入力パラメーターとして定数をサポートしていません。
パラメーター:
d: 必須。元の日付と時刻の値。
num: 必須。加算または減算する間隔。
str: 必須。指定された時間単位。有効な値: yyyy、year、mm、month、mon、dd、day、hh、hour、mi、ss。
戻り値:
DATE、TIMESTAMP、または TIMESTAMPTZ 型の値が返されます。
例:
CREATE TABLE test_dateadd (a TIMESTAMP); INSERT INTO test_dateadd VALUES ('2005-02-28 00:00:00'); -- 指定された日付と時刻の値に 1 か月を追加します。 SELECT DATEADD(a , 1, 'mm') FROM test_dateadd;次の結果が返されます。
dateadd --------------------- 2005-03-28 00:00:00
ADD_MONTHS
説明: 指定した日付と時刻の値に特定の月数を追加します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。
ADD_MONTHS(<d> DATE, <month> INT)パラメーター:
d: 必須。元の日付。
month: 必須。元の日付に追加する整数。
戻り値:
DATE 型の値が返されます。
例:
SELECT ADD_MONTHS(current_date, 2);次の結果が返されます。
add_months ------------ 2024-10-05
DATEDIFF
説明: 2 つの日付またはタイムスタンプの差を計算します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。
DATEDIFF(<d1> DATE|TIMESTAMP|TIMESTAMPTZ, <d2> DATE|TIMESTAMP|TIMESTAMPTZ, <str> TEXT)使用上の注意:
次のバージョンの Hologres インスタンスでこの関数がサポートされています。
V2.0.31 から V2.1.0
V2.1.13 以降
説明この関数の入力パラメーターは、すべて定数にすることはできません。
パラメーター:
d1: 必須。最初の日付またはタイムスタンプ。
d2: 必須。2 番目の日付またはタイムスタンプ。
str: 必須。時間差の計算の基になる時間単位。有効な値: yyyy、year、mm、month、mon、dd、day、hh、hour、mi、ss。
戻り値:
BIGINT 型の値が返されます。指定された時間単位の時間差が 1 未満の場合、デフォルトで値 0 が返されます。
たとえば、この関数を使用して、時間単位 year に基づいて 2023-12-31 と 2024-01-01 の差を計算すると、値 0 が返されます。
説明前述のシナリオで関数が 1 を返すようにするには、SQL 文の前に
set hg_experimental_datediff_use_presto_impl = off;を実行して、この GUC パラメーターを無効にします。例:
CREATE TABLE test_datediff (a TIMESTAMP); INSERT INTO test_datediff VALUES ('2005-02-28 00:00:00'); -- 2 つの日付の差を分で計算します。 SELECT DATEDIFF(a , '2005-03-02 00:00:00', 'mi') FROM test_datediff;次の結果が返されます。
datediff ---------- -2880
MONTHS_BETWEEN
説明: 2 つの日付の間の月数を返します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。
MONTHS_BETWEEN(DATE, DATE)戻り値:
INT 型の値が返されます。
例:
例 1:
-- 戻り値: 2. SELECT MONTHS_BETWEEN('2022-01-01', '2021-11-01');例 2:
-- 戻り値: -2. SELECT MONTHS_BETWEEN('2021-11-01', '2022-01-01');
NEXT_DAY
説明: 指定した日付より後の、指定した曜日の最初の日付を返します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。
NEXT_DAY(<d> DATE, <str> TEXT|INT)パラメーター:
d: 必須。指定した日付。
str: 必須。曜日を表す文字列。例: Friday。このパラメーターは、曜日を表す数値に設定することもできます。数値の範囲は 1 から 7 です。値 1 は日曜日を、値 2 は月曜日を示します。同様に、値 7 は土曜日を示します。
戻り値:
DATE 型の値が返されます。
例:
例 1:
-- 戻り値: 2022-05-06. SELECT NEXT_DAY('2022-05-01', 'FRIDAY');例 2:
-- 戻り値: 2022-05-06. SELECT NEXT_DAY('2022-05-01', 5);
日付と時刻の加算: +
戻り値の型 | 例 | 戻り値 |
DATE | 指定した日付に 7 日を追加します。 | 2001-10-05 |
現在の日付に 3 日を追加します。 | 2022-12-10 | |
現在の時刻に 1 日を追加します。 | 2022-12-09 | |
TIMESTAMP | 指定した日付に 3 時間を追加します。時刻は 00:00:00 から始まります。 | 2001-09-28 03:00:00 |
指定した日付に 1 時間を追加します。時刻は 00:00:00 から始まります。 | 2001-09-28 01:00:00 | |
TIMESTAMPTZ | 現在の時刻に 1 日を追加します。 | 2022-12-08 20:09:19.388465+08 |
現在の時刻に 1 か月を追加します。 | 2023-01-08 20:21:50.993481+08 | |
現在の時刻に 2 年を追加します。 | 2024-12-08 20:22:49.416343+08 |
日付と時刻の減算: -
戻り値の型 | 例 | 戻り値 |
INTEGER | 指定した日付から別の指定した日付を減算します。 | 3 |
DATE | 指定した日付から 7 日を減算します。 | 2001-09-24 |
TIMESTAMP | 指定した日付から 3 時間を減算します。 | 2001-09-27 21:00:00 |
指定した日付から 1 時間を減算します。 | 2001-09-27 23:00:00 | |
現在の時刻から 2 日を減算します。 | 2022-12-06 20:27:21.094258+08 |
日付と時刻の乗算: *
戻り値の型 | 例 | 戻り値 |
INTERVAL | 時間乗数 | 0 年 0 か月 63 日 0 時間 0 分 0.0 秒 |
日付と時刻の除算: /
戻り値の型 | 例 | 戻り値 |
INTERVAL | 時間除算 | 0 年 0 か月 0 日 0 時間 40 分 0.0 秒 |
日付と時刻の切り捨て関数
LAST_DAY
説明: 日付値が属する月の最終日を返します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。
LAST_DAY(DATE|TIMESTAMP|TIMESTAMPTZ)使用上の注意:
次のバージョンの Hologres インスタンスでこの関数がサポートされています。
説明この関数は、入力パラメーターとして定数をサポートしていません。
V2.0.31 から V2.1.0
V2.1.13 以降
戻り値:
DATE 型の値が返されます。
例:
2004-02-28 00:00:00の月の最終日を取得します。CREATE TABLE test_last_day (a TIMESTAMP); INSERT INTO test_last_day VALUES ('2004-02-28 00:00:00'); SELECT LAST_DAY(a) FROM test_last_day;次の結果が返されます。
last_day ------------ 2004-02-29
ORACLE_LAST_DAY
説明: 日付値が属する月の最終日を返します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。
ORACLE_LAST_DAY(DATE)戻り値:
DATE 型の値が返されます。
例:
SELECT ORACLE_LAST_DAY('2022-05-01');次の結果が返されます。
oracle_last_day ----------------- 2022-05-31
EXTRACT
説明: 日付と時刻の式 (タイムスタンプ) から、年、月、日、時などの特定の部分を抽出します。
EXTRACT(field FROM TIMESTAMP)説明field パラメーターの入力定数には、century、day、decade、dow (曜日、日曜日は 0)、isodow (曜日、日曜日は 7)、doy (年初からの日数)、epoch、hour、minute、month、quarter、second、week、year があります。
戻り値
DOUBLE PRECISION 型の値が返されます。
例
タイムスタンプから時を抽出します。
-- 戻り値: 20. SELECT EXTRACT(hour FROM timestamp '2001-02-16 20:38:40');現在の時刻から分を抽出します。
-- 戻り値: 12. SELECT EXTRACT(minute FROM NOW());1970 年からフィールドの値で指定された時刻までの秒数を抽出します。
CREATE TABLE time_test(a TEXT); INSERT INTO time_test VALUES ('2001-09-28 03:00:00'); SELECT EXTRACT(epoch FROM to_timestamp(a, 'YYYY-MM-DD')) FROM time_test;次の結果が返されます。
date_part ------------ 1001606400
互換性: Hologres V4.0 以降、ClickHouse および Doris との互換性を向上させるために、次の日付と時刻の切り捨て関数がサポートされています。これらの関数は、入力パラメーターとして定数をサポートしていません。
関数名
戻り値の型
説明
extract_century(timestamp)
DOUBLE PRECISION
extract(century from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_day(timestamp)
toDayOfMonth(timestamp)
day(timestamp)
DOUBLE PRECISION
extract(day from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_decade(timestamp)
DOUBLE PRECISION
extract(decade from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_dow(timestamp)
DOUBLE PRECISION
extract(dow from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_doy(timestamp)
toDayOfYear(timestamp)
dayofyear(timestamp)
DOUBLE PRECISION
extract(doy from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_hour(timestamp)
toHour(timestamp)
hour(timestamp)
DOUBLE PRECISION
extract(hour from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_isodow(timestamp)
dayofweek_iso(timestamp)
DOUBLE PRECISION
extract(isodow from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_minute(timestamp)
toMinute(timestamp)
minute(timestamp)
DOUBLE PRECISION
extract(minute from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_month(timestamp)
toMonth(timestamp)
month(timestamp)
DOUBLE PRECISION
extract(month from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_quarter(timestamp)
toQuarter(timestamp)
quarter(timestamp)
DOUBLE PRECISION
extract(quarter from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_second(timestamp)
toSecond(timestamp)
second(timestamp)
DOUBLE PRECISION
extract(second from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_isoweek(timestamp)
toIsoWeek(timestamp)
week_iso(timestamp)
DOUBLE PRECISION
extract(week from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
extract_year(timestamp)
toYear(timestamp)
year(timestamp)
DOUBLE PRECISION
extract(year from timestamp) と同じセマンティクスですが、パフォーマンスが向上しています。
DATE_PART
説明: タイムスタンプから年、月、日、時などの特定の部分を抽出します。この関数は EXTRACT 関数と同等です。
DATE_PART(<str> TEXT, <d> TIMESTAMP)パラメーター:
str: 必須。抽出する部分。有効な値: century、day、decade、dow(曜日、日曜日は 0)、isodow(曜日、日曜日は 7)、doy(年の通算日)、epoch(Unix エポックからの日数)、hour、minute、month、quarter、second、week、year。
d: 必須。日付と時刻の式。
戻り値:
DOUBLE PRECISION 型の値が返されます。
例:
例 1:タイムスタンプから時間部分を抽出します。
SELECT DATE_PART('hour', timestamp '2001-02-16 16:38:40');次の結果が返されます。
date_part ----------- 16例 2:1 月 1 日から指定した日付までの週数を抽出します。
SELECT DATE_PART('week', TO_DATE('2022-10-11', 'YYYY-MM-DD'));次の結果が返されます。
date_part ----------- 41例 3:1 月 1 日から指定した日付までの月数を抽出します。
SELECT DATE_PART('month', TO_DATE('2022-10-11', 'YYYY-MM-DD'));次の結果が返されます。
date_part ----------- 10
DATE_TRUNC
説明: 日付と時刻のデータを指定された時間単位に切り捨てます。
DATE_TRUNC(<str> TEXT, <d> TIME|TIMESTAMP|TIMESTAMPTZ)パラメーター:
str: 必須。時間単位。有効な値: century、decade、year、quarter、month、week、day、hour、minute、second。
d: 必須。切り捨てる日付と時刻のデータ。
戻り値:
TIMESTAMP または TIMESTAMPTZ 型の値が返されます。
例:
例 1: 指定したタイムスタンプを時の部分に切り捨てます。
SELECT DATE_TRUNC('hour', time '12:38:40');次の結果が返されます。
date_trunc ------------ 12:00:00例 2: 指定したタイムスタンプを日の部分に切り捨てます。
SELECT DATE_TRUNC('day', timestamptz'2001-02-16 20:38:40+08');次の結果が返されます。
date_trunc ------------------------ 2001-02-16 00:00:00+08例 3: 指定したタイムスタンプを月の部分に切り捨てます。
SELECT DATE_TRUNC('month', timestamp '2001-02-16 18:38:40');次の結果が返されます。
date_trunc --------------------- 2001-02-01 00:00:00例 4: 現在のタイムスタンプを月の部分に切り捨て、12 時間を追加して、現在の月の最初の日の 12:00:00 を返します。
SELECT DATE_TRUNC('month',now()) +interval '12h';次の結果が返されます。
?column? --------------------- 2024-08-01 12:00:00+08例 5: 現在のタイムスタンプを日の部分に切り捨て、9 時間を追加して、現在の日の 09:00:00 を返します。
SELECT DATE_TRUNC('day',now()) + interval '9h';次の結果が返されます。
?column? ------------------------ 2024-08-08 09:00:00+08例 6: 同じ曜日を抽出します。
SELECT DATE_TRUNC('day',now()) + interval '7d';次の結果が返されます。
?column? ------------------------ 2024-08-15 00:00:00+08
TRUNC
説明: 日付またはタイムスタンプを指定された時間単位に切り捨てます。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。
TRUNC(<d> DATE|TIMESTAMP [, <str> TEXT])パラメーター:
d: 必須。切り捨てる日付と時刻の値。TIMESTAMPTZ 型の値を指定した場合、残りの部分は 0 に設定されます。
str: オプション。時間単位。このパラメーターを設定しない場合、元の日付が返されます。このパラメーターは Y または Q に設定できます。値 Y は年の最初の日を示し、値 Q は四半期の最初の日を示します。詳細については、Oracle のドキュメントをご参照ください。
戻り値:
DATE または TIMESTAMPTZ 型の値が返されます。
例:
例 1:
SELECT TRUNC('2022-05-22'::date,'Y');次の結果が返されます。
trunc ------------ 2022-01-01例 2:
SELECT TRUNC('2022-05-22 13:11:22'::timestamp,'Y');次の結果が返されます。
trunc --------------------- 2022-01-01 00:00:00例 3:
SELECT TRUNC('2022-05-22 13:11:22'::timestamp,'Q');次の結果が返されます。
trunc --------------------- 2022-04-01 00:00:00例 4:
SELECT TRUNC('2022-05-22 13:11:22'::timestamp);次の結果が返されます。
trunc --------------------- 2022-05-22 00:00:00
ROUND
説明: 日付を、時間単位に基づいて最も近い値に丸めます。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。
ROUND(<d> DATE|TIMESTAMPTZ [, <str> TEXT])パラメーター:
d: 必須。丸める日付。TIMESTAMPTZ 型の値を指定した場合、残りの部分は 0 に設定されます。
str: オプション。時間単位。このパラメーターを設定しない場合、この関数は日付を最も近い日に丸めます。このパラメーターは Y に設定できます。これは、最も近い年の最初の日を示します。詳細については、Oracle のドキュメントをご参照ください。
戻り値:
DATE または TIMESTAMPTZ 型の値が返されます。
例:
例 1:
SELECT ROUND('2022-05-22'::date,'Y');次の結果が返されます。
round ------------ 2022-01-01例 2:
SELECT ROUND('2022-07-22'::date,'Y');次の結果が返されます。
round ------------ 2023-01-01例 3:
SELECT ROUND('2022-07-22 13:11:22'::timestamp,'Y');次の結果が返されます。
round --------------------- 2023-01-01 00:00:00例 4:
SELECT ROUND('2022-02-22 13:11:22'::timestamp);次の結果が返されます。
round --------------------- 2022-02-23 00:00:00
現在の日付と時刻の取得関数
CURRENT_DATE
説明: 現在の日付を返します。
CURRENT_DATE戻り値:
DATE 型の値が返されます。
例:
SELECT CURRENT_DATE;次の結果が返されます。
current_date -------------- 2024-08-08
CURRENT_TIMESTAMP
説明: 現在のトランザクションの開始時刻を返します。この関数は TRANSACTION_TIMESTAMP 関数または NOW 関数と同等です。
CURRENT_TIMESTAMP説明戻り値は、トランザクションのライフサイクル中は変更されません。
戻り値:
TIMESTAMPTZ 型の値が返されます。
例:
SELECT CURRENT_TIMESTAMP;次の結果が返されます。
current_timestamp ------------------------------- 2024-08-08 14:55:11.006068+08
CLOCK_TIMESTAMP
説明: 現在の日付と時刻を返します。
clock_timestamp()説明変更は、単一のコマンド内でも行うことができます。
戻り値:
TIMESTAMPTZ 型の値が返されます。
例:
SELECT clock_timestamp();次の結果が返されます。
clock_timestamp ------------------------------- 2024-08-08 14:57:43.569109+08
LOCALTIMESTAMP
説明: タイムゾーン情報を含まない現在の時刻を返します。
LOCALTIMESTAMP戻り値:
TIMESTAMPTZ 型の値が返されます。
例:
SELECT LOCALTIMESTAMP;次の結果が返されます。
localtimestamp --------------------------- 2024-08-08 15:00:59.13245
NOW
説明: 現在のトランザクションの開始時刻を返します。この関数は TRANSACTION_TIMESTAMP 関数または CURRENT_TIMESTAMP 関数と同等です。
NOW()説明戻り値は、トランザクションのライフサイクル中は変更されません。
戻り値:
TIMESTAMPTZ 型の値が返されます。
例:
SELECT NOW();次の結果が返されます。
now ------------------------------- 2024-08-08 15:02:50.270501+08
STATEMENT_TIMESTAMP
説明: 現在のステートメントの開始時刻を返します。
STATEMENT_TIMESTAMP()説明戻り値は、関数が使用されているトランザクションのステートメントによって異なります。
戻り値:
TIMESTAMPTZ 型の値が返されます。
例:
SELECT STATEMENT_TIMESTAMP();次の結果が返されます。
statement_timestamp ------------------------------- 2024-08-08 15:06:14.772939+08
TIMEOFDAY
説明: 現在の日付と時刻を返します。この関数は CLOCK_TIMESTAMP 関数に似ています。TIMEOFDAY 関数によって返される値は、フォーマットされたテキスト文字列です。
TIMEOFDAY()戻り値:
TEXT 型の値が返されます。
例:
SELECT TIMEOFDAY();次の結果が返されます。
timeofday ------------------------------------- Thu Aug 08 15:08:16.599369 2024 CST
TRANSACTION_TIMESTAMP
説明: 現在のトランザクションの開始時刻を返します。この関数は CURRENT_TIMESTAMP 関数または NOW 関数と同等です。
TRANSACTION_TIMESTAMP()説明戻り値は、トランザクションのライフサイクル中は変更されません。
戻り値:
TIMESTAMPTZ 型の値が返されます。
例:
SELECT TRANSACTION_TIMESTAMP();次の結果が返されます。
transaction_timestamp ------------------------------- 2024-08-08 15:11:10.329005+08
その他の関数
ISFINITE
説明:
DATE 型の日付が有限数であるかどうかを確認します。
ISFINITE(DATE)タイムスタンプが有限数であるかどうかを確認します。
ISFINITE(TIMESTAMP)
戻り値:
BOOLEAN 型の値が返されます。日付またはタイムスタンプが有限数の場合、値 true(t)が返され、日付またはタイムスタンプが有限数でない場合、値 false(f)が返されます。
例:
例 1:
SELECT ISFINITE(date '2001-02-16');次の結果が返されます。
isfinite ---------- t例 2:
SELECT ISFINITE(timestamp '2001-02-16 21:28:30');次の結果が返されます。
isfinite ---------- t
一般的な SQL ステートメントの例
例 1: 現在の時刻に数時間を追加します。
SELECT NOW()+interval '2 hour';次の結果が返されます。
?column? --------------------- 2022-12-29 13:43:58.321104+08例 2: 日付をタイムスタンプに変換します。
SELECT EXTRACT(epoch FROM current_timestamp);次の結果が返されます。
date_part --------------------- 1672285506.296279例 3: DATE 型の値と INT 型の値を加算します。
CREATE TABLE date_test1( a DATE, b INT ); INSERT INTO date_test1 VALUES ('2021-09-28','12'); SELECT a + (b || ' month')::interval FROM date_test1;次の結果が返されます。
?column? -------------------- 2022-09-28 00:00:00例 4: 文字列をタイムスタンプに変換します。
SELECT TO_TIMESTAMP(TO_CHAR(20211027172045,'9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS');次の結果が返されます。
to_timestamp ---------------------- 2021-10-27 17:20:45+08例 5: 時刻の切り捨て
SELECT EXTRACT(mon FROM now());次の結果が返されます。
date_part --------- 12例 6: 整数を別の整数で割ります。
2 つの整数を除算する場合、Hologres は整数除算を実行し、余りを破棄します。たとえば、
10/3の結果は 3 です。10 進数部分を含む結果を得るには、次の例に示すように、計算の前にデータ型を明示的に float にキャストします:SELECT 10/3::float;次の結果が返されます。
?column? --------- 3.3333333333333335