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

Hologres:日付および時刻関数

最終更新日:Nov 09, 2025

このトピックでは、Hologres でサポートされている日付と時刻の関数について説明し、関数の使用方法の例を示します。

タイプ

関数

機能

データ型変換関数

MAKE_DATE

年、月、日で構成される日付を作成します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。

TO_CHAR

タイムスタンプ、整数、実数、または倍精度浮動小数点数を文字列に変換します。

TO_DATE

文字列を日付に変換します。デフォルトでは、1925 年から 2282 年までの日付を表す文字列のみを変換できます。

TO_TIMESTAMP

文字列をタイムスタンプに、またはタイムスタンプを日付に変換します。

日付と時刻の値に対する基本操作のための関数と演算子

ADD_MONTHS

指定した日付に特定の月数を追加します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。

DATEADD

指定された日付と時刻の値に、指定された時間単位に基づいて間隔を加算または減算します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。

DATEDIFF

2 つの日付またはタイムスタンプの差を計算します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。

MONTHS_BETWEEN

2 つの日付の間の月数を返します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。

NEXT_DAY

指定した日付より後の、指定した曜日の最初の日付を返します。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。

日付または時刻の加算: 演算子 +

日数または時刻を加算します。

日付または時刻の減算: 演算子 -

日数または時刻を減算します。

日付または時刻の乗算: 演算子 *

日数または時刻を乗算します。

日付または時刻の除算: 演算子 /

日数または時刻を除算します。

日付と時刻の切り捨て関数

DATE_PART

タイムスタンプから年、月、日、時などの特定の部分を抽出します。この関数は EXTRACT 関数と同等です。

DATE_TRUNC

日付と時刻のデータを指定された時間単位に切り捨てます。

EXTRACT

タイムスタンプから年、月、日、時などの特定の部分を抽出します。

LAST_DAY

日付値が属する月の最終日を返します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。

ORACLE_LAST_DAY

日付値が属する月の最終日を返します。デフォルトでは、1925 年から 2282 年までの時点を表す日付と時刻の値のみがサポートされています。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。

ROUND

日付を、時間単位に基づいて最も近い値に丸めます。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。

TRUNC

日付またはタイムスタンプを指定された時間単位に切り捨てます。この関数は Oracle と互換性があります。この関数を使用する前に、Orafce 拡張機能をインストールする必要があります。詳細については、「サポートされている Oracle 関数」をご参照ください。

現在の日付と時刻の取得関数

CLOCK_TIMESTAMP

現在の日付と時刻を返します。

CURRENT_DATE

現在の日付を返します。

CURRENT_TIMESTAMP

現在のトランザクションの開始時刻を返します。この関数は TRANSACTION_TIMESTAMP 関数または NOW 関数と同等です。

LOCALTIMESTAMP

タイムゾーン情報を含まない現在の時刻を返します。

NOW

現在のトランザクションの開始時刻を返します。この関数は TRANSACTION_TIMESTAMP 関数または CURRENT_TIMESTAMP 関数と同等です。

STATEMENT_TIMESTAMP

現在のステートメントの開始時刻を返します。

TIMEOFDAY

現在の日付と時刻を返します。この関数は CLOCK_TIMESTAMP 関数に似ています。TIMEOFDAY 関数によって返される値は、フォーマットされたテキスト文字列です。

TRANSACTION_TIMESTAMP

現在のトランザクションの開始時刻を返します。この関数は CURRENT_TIMESTAMP 関数または NOW 関数と同等です。

その他

ISFINITE

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+08
    • TEXT データ型の文字列をタイムスタンプに変換します。

      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 日を追加します。

SELECT date '2001-09-28' + integer '7';

2001-10-05

現在の日付に 3 日を追加します。

SELECT current_date+ integer '3 ';

2022-12-10

現在の時刻に 1 日を追加します。

SELECT to_char(current_date+ interval '1 day','yyyy-mm-dd');

2022-12-09

TIMESTAMP

指定した日付に 3 時間を追加します。時刻は 00:00:00 から始まります。

SELECT date '2001-09-28' + time '03:00';

2001-09-28 03:00:00

指定した日付に 1 時間を追加します。時刻は 00:00:00 から始まります。

SELECT date '2001-09-28' + interval '1 hour';

2001-09-28 01:00:00

TIMESTAMPTZ

現在の時刻に 1 日を追加します。

SELECT now()+interval '1 day';

2022-12-08 20:09:19.388465+08

現在の時刻に 1 か月を追加します。

SELECT now()+interval '1 month';

2023-01-08 20:21:50.993481+08

現在の時刻に 2 年を追加します。

 SELECT now()+interval '2 year';

2024-12-08 20:22:49.416343+08

日付と時刻の減算: -

戻り値の型

戻り値

INTEGER

指定した日付から別の指定した日付を減算します。

SELECT date '2001-10-01' - date '2001-09-28';

3

DATE

指定した日付から 7 日を減算します。

SELECT date '2001-10-01' - integer '7';

2001-09-24

TIMESTAMP

指定した日付から 3 時間を減算します。

SELECT date '2001-09-28' - time '03:00';

2001-09-27 21:00:00

指定した日付から 1 時間を減算します。

 SELECT date '2001-09-28' - interval '1 hour';

2001-09-27 23:00:00

現在の時刻から 2 日を減算します。

SELECT now()-interval '2 day';

2022-12-06 20:27:21.094258+08

日付と時刻の乗算: *

戻り値の型

戻り値

INTERVAL

時間乗数

SELECT 21 * interval '3 day';

0 年 0 か月 63 日 0 時間 0 分 0.0 秒

日付と時刻の除算: /

戻り値の型

戻り値

INTERVAL

時間除算

SELECT interval '1 hour' / double precision '1.5';

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