カテゴリ:

日付と時刻の関数

TRUNCATE, TRUNC

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

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

TRUNCATE および TRUNC 関数は同義語です。

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

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

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

注釈

TRUNC はオーバーロードされます。数値に対して 有効桁数を減らす ために使用することもできます。例えば、小数点値を整数に切り捨てる場合などです。数値の TRUNC には、必須のパラメーターが1つと、オプションのパラメーターが1つあります。日付/時刻の TRUNC には2つのパラメーターが必要です。

代替候補:

DATE_TRUNC

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

DATE_PARTEXTRACT

構文

TRUNC( <date_or_time_expr>, <date_or_time_part> ) 
Copy

引数

date_or_time_expr

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

date_or_time_part

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

戻り値

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

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

使用上の注意

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

  • TIME の値の場合、 TIME タイプの範囲外の date_or_time_part を指定することはできません。例えば、 TIMESTAMP の値を切り捨てて、 dayweekyear などにすることができます。これは、 TIMESTAMP タイプが必要な精度で日付/時刻をエンコードするためです。しかし、 TIME の値を切り捨てて、 dayweekyear などにしようとするとエラーになります。

以下の例は、日付/時刻値の 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; 
Copy
+------------+----------+-------------------------+ | 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; 
Copy
+------------+-------------------+--------------------+------------------+ | 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; 
Copy
+----------+---------------------+ | 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; 
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 | +-------------------------+-------------------------+-------------------------+-------------------------+ 

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

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