SQL TRUNC 関数

TRUNCは数値や日時を切り捨てるOracle SQL関数である。

TRUNC
DBMS TRUNC TRUNCATE
MySQL ✗ ✓
Oracle ✓ ✗
PostgreSQL ✓ ✗
SQL Server ✗ ✗

TRUNCの構文

数値の小数点以下を切り捨てた整数を返す。

TRUNC(number)

指定した桁位置で切り捨てた数値を返す。

TRUNC(number, scale)

日を切り捨てる。

TRUNC(date)

指定した時間の要素を切り捨てる。

TRUNC(date, format)

TRUNCの引数

number

値を切り捨てる数値を指定する。

scale

小数点以下何桁まで残すかを指定する。

date

基準となる日時(DATE型)を指定する。

format

切り捨てる時間の要素を指定する。

format 説明
YYYY 年
MM 月
DD 日(デフォルト)
HH 時
MI 分

TRUNCの使用例

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関数がある。

CEIL
指定した数値以上の最小の整数を返す。
FLOOR
指定した数値以下の最大の整数を返す。
ROUND
数値や日付を丸めた値を返す。(四捨五入)