- カテゴリ:
TRUNCATE, TRUNC¶
DATE、 TIME、または TIMESTAMP 値を指定された精度に切り捨てます。例えば、タイムスタンプを四半期に切り捨てると、元のタイムスタンプの四半期の最初の日の午前0時に対応するタイムスタンプが返されます。
この関数は、2つの引数を逆にして DATE_TRUNC の代替構文を提供します。
TRUNCATE および TRUNC 関数は同義語です。
切り捨ては抽出とは異なります。例:
この関数を使用してタイムスタンプを四半期に切り捨てると、入力タイムスタンプ用に、四半期の初日の午前0時に対応するタイムスタンプが返されます。
EXTRACT 関数を使用してタイムスタンプから四半期の日付部分を抽出すると、タイムスタンプ内にある年の四半期の数値が返されます。
注釈
TRUNC はオーバーロードされます。数値に対して 有効桁数を減らす ために使用することもできます。例えば、小数点値を整数に切り捨てる場合などです。数値の TRUNC には、必須のパラメーターが1つと、オプションのパラメーターが1つあります。日付/時刻の TRUNC には2つのパラメーターが必要です。
- 代替候補:
- こちらもご参照ください。
構文¶
TRUNC( <date_or_time_expr>, <date_or_time_part> )
引数¶
date_or_time_expr
この引数は日付、時刻、またはタイムスタンプに評価される必要があります。
date_or_time_part
サポートされている日付と時刻の部分 にリストされている値のいずれかにする必要があります。
戻り値¶
返される値は、入力値と同じ型です。
例えば、入力値が TIMESTAMP の場合、返される値は TIMESTAMP です。
使用上の注意¶
date_or_time_part
がweek
(またはそのバリエーション)の場合、出力は WEEK_START セッションパラメーターによって制御されます。例などの詳細については、 カレンダーの週と平日 をご参照ください。TIME の値の場合、 TIME タイプの範囲外の
date_or_time_part
を指定することはできません。例えば、 TIMESTAMP の値を切り捨てて、day
、week
、year
などにすることができます。これは、 TIMESTAMP タイプが必要な精度で日付/時刻をエンコードするためです。しかし、 TIME の値を切り捨てて、day
、week
、year
などにしようとするとエラーになります。
例¶
以下の例は、日付/時刻値の TRUNC または TRUNCATE 関数を示しています。数値の切り捨ての例については、 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;
+------------+----------+-------------------------+
| MYDATE | MYTIME | MYTIMESTAMP |
|------------+----------+-------------------------|
| 2024-05-09 | 08:50:48 | 2024-05-09 08:50:57.891 |
+------------+----------+-------------------------+
以下の例は日付の切り捨てを示しています。いずれの場合も、返される値は入力値と同じデータ型ですが、切り捨てられた部分、例えば秒の端数にはゼロが入ります。
DATE 値を年、月、日に切り捨てます。
SELECT mydate AS "DATE",
TRUNC(mydate, 'year') AS "TRUNCATED TO YEAR",
TRUNC(mydate, 'month') AS "TRUNCATED TO MONTH",
TRUNC(mydate, 'day') AS "TRUNCATED TO DAY"
FROM test_date_trunc;
+------------+-------------------+--------------------+------------------+
| DATE | TRUNCATED TO YEAR | TRUNCATED TO MONTH | TRUNCATED TO DAY |
|------------+-------------------+--------------------+------------------|
| 2024-05-09 | 2024-01-01 | 2024-05-01 | 2024-05-09 |
+------------+-------------------+--------------------+------------------+
TIME 値を分単位で切り捨てます。
SELECT mytime AS "TIME",
TRUNCATE(mytime, 'minute') AS "TRUNCATED TO MINUTE"
FROM test_date_trunc;
+----------+---------------------+
| TIME | TRUNCATED TO MINUTE |
|----------+---------------------|
| 08:50:48 | 08:50:00 |
+----------+---------------------+
TIMESTAMP 値を時、分、秒単位で切り捨てます。
SELECT mytimestamp AS "TIMESTAMP",
TRUNCATE(mytimestamp, 'hour') AS "TRUNCATED TO HOUR",
TRUNCATE(mytimestamp, 'minute') AS "TRUNCATED TO MINUTE",
TRUNCATE(mytimestamp, 'second') AS "TRUNCATED TO SECOND"
FROM test_date_trunc;
+-------------------------+-------------------------+-------------------------+-------------------------+
| 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 |
+-------------------------+-------------------------+-------------------------+-------------------------+
TRUNC 関数と EXTRACT 関数を対比します。
SELECT TRUNC(mytimestamp, 'quarter') AS "TRUNCATED",
EXTRACT('quarter', mytimestamp) AS "EXTRACTED"
FROM test_date_trunc;
+-------------------------+-----------+
| TRUNCATED | EXTRACTED |
|-------------------------+-----------|
| 2024-04-01 00:00:00.000 | 2 |
+-------------------------+-----------+