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
数値や日付を丸めた値を返す。(四捨五入)