カテゴリ:

日付と時刻の関数

DATE_TRUNC

DATE、 TIME、または TIMESTAMP 値を指定された精度に切り捨てます。例えば、タイムスタンプを四半期に切り捨てると、元のタイムスタンプの四半期の最初の日の午前0時に対応するタイムスタンプが返されます。

この関数は、2つの引数を逆にして TRUNC の代替構文を提供します。

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

  • この関数を使用してタイムスタンプを四半期に切り捨てると、入力タイムスタンプ用に、四半期の初日の午前0時に対応するタイムスタンプが返されます。

  • EXTRACT 関数を使用してタイムスタンプから四半期の日付部分を抽出すると、タイムスタンプ内にある年の四半期の数値が返されます。

代替候補:

TRUNC

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

DATE_PARTEXTRACT

構文

DATE_TRUNC( <date_or_time_part>, <date_or_time_expr> )
Copy

引数

date_or_time_part

サポートされている日付と時刻の部分 にリストされている値のいずれかにする必要があります。

date_or_time_expr

この引数は日付、時刻、またはタイムスタンプに評価される必要があります。

戻り値

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

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

使用上の注意

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

DATE_TRUNC 関数の例では、以下のテーブルのデータを使用します。

CREATE OR REPLACE TABLE test_date_trunc (
 mydate DATE,
 mytime TIME,
 mytimestamp TIMESTAMP);

INSERT INTO test_date_trunc VALUES (
  '2024-05-09',
  '08:50:48',
  '2024-05-09 08:50:57.891 -0700');

SELECT * FROM test_date_trunc;
Copy
+------------+----------+-------------------------+
| MYDATE     | MYTIME   | MYTIMESTAMP             |
|------------+----------+-------------------------|
| 2024-05-09 | 08:50:48 | 2024-05-09 08:50:57.891 |
+------------+----------+-------------------------+

以下の例は日付の切り捨てを示しています。いずれの場合も、返される値は入力値と同じデータ型ですが、秒の端数など切り捨てられた部分にはゼロが入ります。

日付を年、月、日までに切り捨てます。

SELECT mydate AS "DATE",
       DATE_TRUNC('year', mydate) AS "TRUNCATED TO YEAR",
       DATE_TRUNC('month', mydate) AS "TRUNCATED TO MONTH",
       DATE_TRUNC('week', mydate) AS "TRUNCATED TO WEEK",
       DATE_TRUNC('day', mydate) AS "TRUNCATED TO DAY"
  FROM test_date_trunc;
Copy
+------------+-------------------+--------------------+-------------------+------------------+
| DATE       | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO WEEK | TRUNCATED TO DAY |
|------------+-------------------+--------------------+-------------------+------------------|
| 2024-05-09 | 2024-01-01        | 2024-05-01         | 2024-05-06        | 2024-05-09       |
+------------+-------------------+--------------------+-------------------+------------------+

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

SELECT mytime AS "TIME",
       DATE_TRUNC('minute', mytime) AS "TRUNCATED TO MINUTE"
  FROM test_date_trunc;
Copy
+----------+---------------------+
| TIME     | TRUNCATED TO MINUTE |
|----------+---------------------|
| 08:50:48 | 08:50:00            |
+----------+---------------------+

TIMESTAMP を時間、分、秒までに切り捨てます。

SELECT mytimestamp AS "TIMESTAMP",
       DATE_TRUNC('hour', mytimestamp) AS "TRUNCATED TO HOUR",
       DATE_TRUNC('minute', mytimestamp) AS "TRUNCATED TO MINUTE",
       DATE_TRUNC('second', mytimestamp) AS "TRUNCATED TO SECOND"
  FROM test_date_trunc;
Copy
+-------------------------+-------------------------+-------------------------+-------------------------+
| TIMESTAMP               | TRUNCATED TO HOUR       | TRUNCATED TO MINUTE     | TRUNCATED TO SECOND     |
|-------------------------+-------------------------+-------------------------+-------------------------|
| 2024-05-09 08:50:57.891 | 2024-05-09 08:00:00.000 | 2024-05-09 08:50:00.000 | 2024-05-09 08:50:57.000 |
+-------------------------+-------------------------+-------------------------+-------------------------+

DATE_TRUNC 関数と EXTRACT 関数を対比します。

SELECT DATE_TRUNC('quarter', mytimestamp) AS "TRUNCATED",
       EXTRACT('quarter', mytimestamp) AS "EXTRACTED"
  FROM test_date_trunc;
Copy
+-------------------------+-----------+
| TRUNCATED               | EXTRACTED |
|-------------------------+-----------|
| 2024-04-01 00:00:00.000 |         2 |
+-------------------------+-----------+