カテゴリ:

日付と時刻の関数

DATE_TRUNC

DATETIME、または TIMESTAMP を指定された精度に切り捨てます。

切り捨ては抽出とは異なります。例:

  • タイムスタンプを四半期まで切り捨てると、入力タイムスタンプの四半期の最初の日の真夜中に対応するタイムスタンプが返されます。

  • タイムスタンプから四半期の日付部分を抽出すると、タイムスタンプの年の四半期の数値が返されます。

代替候補:

TRUNC

こちらもご参照ください。

DATE_PARTEXTRACT

構文

DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )
Copy

戻り値

返される値は、入力値と同じ型です。

例えば、入力値が TIMESTAMP の場合、返される値は TIMESTAMP です。

使用上の注意

  • date_or_time_part は、 サポートされている日付と時刻の部分 にリストされている値のいずれかでなければなりません。

    date_or_time_partweek (またはそのバリエーション)の場合、出力は WEEK_START セッションパラメーターによって制御されます。例などの詳細については、 カレンダーの週と平日 をご参照ください。

  • date_or_time_expr は、日付、時刻、またはタイムスタンプにすることができます。

(タイムスタンプからの)日付を年、月、日までに切り詰めます。

SELECT TO_DATE('2015-05-08T23:39:20.123-07:00') AS "DATE1",
       DATE_TRUNC('YEAR', "DATE1") AS "TRUNCATED TO YEAR",
       DATE_TRUNC('MONTH', "DATE1") AS "TRUNCATED TO MONTH",
       DATE_TRUNC('DAY', "DATE1") AS "TRUNCATED TO DAY";
+------------+-------------------+--------------------+------------------+
| DATE1      | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO DAY |
|------------+-------------------+--------------------+------------------|
| 2015-05-08 | 2015-01-01        | 2015-05-01         | 2015-05-08       |
+------------+-------------------+--------------------+------------------+
Copy

TIMESTAMP を時間、分、秒までに切り詰めます。すべての場合で、戻り値は TIMESTAMP ですが、切り捨てられた部分(例: 秒の小数部)にはゼロがあることに注意してください。

SELECT TO_TIMESTAMP('2015-05-08T23:39:20.123-07:00') AS "TIMESTAMP1",
       DATE_TRUNC('HOUR', "TIMESTAMP1") AS "TRUNCATED TO HOUR",
       DATE_TRUNC('MINUTE', "TIMESTAMP1") AS "TRUNCATED TO MINUTE",
       DATE_TRUNC('SECOND', "TIMESTAMP1") AS "TRUNCATED TO SECOND";
+-------------------------+-------------------------+-------------------------+-------------------------+
| TIMESTAMP1              | TRUNCATED TO HOUR       | TRUNCATED TO MINUTE     | TRUNCATED TO SECOND     |
|-------------------------+-------------------------+-------------------------+-------------------------|
| 2015-05-08 23:39:20.123 | 2015-05-08 23:00:00.000 | 2015-05-08 23:39:00.000 | 2015-05-08 23:39:20.000 |
+-------------------------+-------------------------+-------------------------+-------------------------+
Copy

時間を分までに切り詰めます。

SELECT TO_TIME('23:39:20.123') AS "TIME1",
       DATE_TRUNC('MINUTE', "TIME1") AS "TRUNCATED TO MINUTE";
+----------+---------------------+
| TIME1    | TRUNCATED TO MINUTE |
|----------+---------------------|
| 23:39:20 | 23:39:00            |
+----------+---------------------+
Copy

切り捨てと抽出の比較:

SELECT DATE_TRUNC('QUARTER', '2019-08-01 12:34:56.789'::TIMESTAMP_NTZ) AS "TRUNCATED",
       EXTRACT(   'QUARTER', '2019-08-01 12:34:56.789'::TIMESTAMP_NTZ) AS "EXTRACTED";
+-------------------------+-----------+
| TRUNCATED               | EXTRACTED |
|-------------------------+-----------|
| 2019-07-01 00:00:00.000 |         3 |
+-------------------------+-----------+
Copy