TRUNCは数値や日時を切り捨てるOracle SQL関数である。
DBMS | TRUNC | TRUNCATE |
---|---|---|
MySQL | ✗ | ✓ |
Oracle | ✓ | ✗ |
PostgreSQL | ✓ | ✗ |
SQL Server | ✗ | ✗ |
数値の小数点以下を切り捨てた整数を返す。
TRUNC(number)
指定した桁位置で切り捨てた数値を返す。
TRUNC(number, scale)
日を切り捨てる。
TRUNC(date)
指定した時間の要素を切り捨てる。
TRUNC(date, format)
値を切り捨てる数値を指定する。
小数点以下何桁まで残すかを指定する。
基準となる日時(DATE型)を指定する。
切り捨てる時間の要素を指定する。
format | 説明 |
---|---|
YYYY | 年 |
MM | 月 |
DD | 日(デフォルト) |
HH | 時 |
MI | 分 |
SQL> SELECT TRUNC(123.456) FROM DUAL;
TRUNC(123.456)
--------------
123
SQL> SELECT TRUNC(123.456, 0) FROM DUAL;
TRUNC(123.456,0)
----------------
123
SQL> SELECT TRUNC(123.456, 1) FROM DUAL;
TRUNC(123.456,1)
----------------
123.4
SQL> SELECT TRUNC(123.456, 2) FROM DUAL;
TRUNC(123.456,2)
----------------
123.45
SQL> SELECT TRUNC(123.456, -1) FROM DUAL;
TRUNC(123.456,-1)
-----------------
120
SQL> SELECT TRUNC(123.456, -2) FROM DUAL;
TRUNC(123.456,-2)
-----------------
100
SQL>
現在の日付と時刻はSYSDATEで取得できる。TRUNC関数と組み合わせることによって、今月1日の日付を取得できる。
SQL> SELECT SYSDATE AS 今日 FROM DUAL;
今日
--------
16-08-23
SQL> SELECT TRUNC(SYSDATE, 'MM') AS 今月1日 FROM DUAL;
今月1日
--------
16-08-01
SQL>
来月1日や先月1日の日付を取得するには、ADD_MONTHS関数と組み合わせる。
SQL> SELECT SYSDATE AS 今日 FROM DUAL;
今日
--------
16-08-23
SQL> SELECT TRUNC(ADD_MONTHS(SYSDATE, 1), 'MM') AS 来月1日 FROM DUAL;
来月1日
--------
16-09-01
SQL> SELECT TRUNC(ADD_MONTHS(SYSDATE, -1), 'MM') AS 先月1日 FROM DUAL;
先月1日
--------
16-07-01
SQL>
数値や日付の丸め(端数処理)に関しては、TRUNC以外にも次のようなSQL関数がある。