Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

TRUNC関数とは?

TRUNC関数とは、引数に指定した数値や日時の切り捨てができる関数です。

引数を増やすことで切り捨てる位置を指定することもできます。

TRUNC関数の構文

TRUNC関数は次のように記述して使います。

TRUNC(数値)

数値の小数点以下を切り捨て、整数を返す構文です。

指定した桁位置で切り捨てたい場合は、次のように記述しましょう。

TRUNC(数値, 小数点以下の桁位置)

また、日付を切り捨てる場合は、引数にDATE型の値を記述します。

TRUNC(日付)

指定した時間を切り捨てたい場合は、次のように記述しましょう。

TRUNC(日付, 切り捨てる時間の要素)

PostgreSQLでも使用可能

TRUNC関数はOracle Databaseで使われる関数ですが、PostgreSQLでも使用可能です。

この記事ではPostgreSQLで使い方を解説します。

MySQLではTRUNCATE関数を使う

MySQLで指定した小数点以下の桁数を切り捨てたい場合は「TRUNCATE関数」を使います。

TRUNC関数ではないので注意しましょう。

TRUNCATE関数の使い方は、次の記事でも詳しく解説していますので参考までに。

【関連記事】
▶︎MySQLのtruncateとは?テーブル削除と切り捨ての2つの機能について解説

TRUNC関数の使い方

ここでは、サンプルを用いながら実際にTRUNC関数の使い方を見ていきましょう。

数値を切り捨てる方法

まずは数値を切り捨ててみます。

mydb=# SELECT TRUNC(12.34);
 trunc 
-------
    12
(1 row)

TRUNC関数の引数「12.34」の少数部分を切り取り、「12」だけを取得しました。

次に、切り取りたい桁数を指定して取得してみましょう。

mydb=# SELECT TRUNC(3.14159265359, 7);
   trunc   
-----------
 3.1415926
(1 row)

引数の数値の後ろに、小数点以下の桁位置を指定すればOKです。

ここでは小数点以下7桁を残し、それ以降を切り捨てました。

第2引数にマイナス値を指定すれば、一の位や十の位などの切り捨ても可能です。

mydb=# SELECT TRUNC(1234.567, -1);
 trunc 
-------
  1230
(1 row)

mydb=# SELECT TRUNC(1234.567, -2);
 trunc 
-------
  1200
(1 row)

このように任意の位置で数値の切り捨てができます!

 

MySQLで使うTRUNCATE関数についても使い方を確認してみましょう。

次のように記述して数値を切り捨てます。

mysql> SELECT TRUNCATE(12.34, 0);
+--------------------+
| TRUNCATE(12.34, 0) |
+--------------------+
|                 12 |
+--------------------+
1 row in set (0.00 sec)

TRUNC関数とは異なり、第2引数の指定が必須です。

整数で取得場合は「0」を指定しましょう。

それ以外の指定はTRUNC関数と同じです。

mysql> SELECT TRUNCATE(12.34, 1);
+--------------------+
| TRUNCATE(12.34, 1) |
+--------------------+
|               12.3 |
+--------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(12.34, -1);
+---------------------+
| TRUNCATE(12.34, -1) |
+---------------------+
|                  10 |
+---------------------+
1 row in set (0.00 sec)

それぞれ指定した位置で切り捨てが行われています。

余談ですが、第1引数内で演算した結果の切り捨ても可能です。

mysql> SELECT TRUNCATE(1.23456*100, 0);
+--------------------------+
| TRUNCATE(1.23456*100, 0) |
+--------------------------+
|                      123 |
+--------------------------+
1 row in set (0.00 sec)

このように、演算結果の「123.456」を整数で切り捨てできています。

日付を切り捨てる方法

日付の切り捨て方法を見ていきましょう。

Oracle Databaseでは、次のように記述します。

SELECT TRUNC(SYSDATE, 'MM')

■実行結果

trunc
--------
20-08-01

第2引数に指定できるフォーマットは次の通りです。

要素 説明
CC 西暦
YYYY
IYYY ISO 年
Q 四半期
MM
WW その年の最初の曜日
IW ISO 年での最初の曜日
W その月の最初の曜日
DAY
DD 日 (デフォルト
HH
MI

PostgreSQLで日付を切り捨てるには、DATE_TRUNC関数を使う

PostgreSQLで日付を切り捨てる場合は「DATE_TRUNC関数」を使います。

書式は次の通りです。

DATE_TRUNC(切り捨てる時間の要素, timestamp 時間)

切り捨てる時間の要素には、次の要素が指定できます。

要素 説明
microseconds マイクロ秒
milliseconds ミリ秒
second
minute
hour
day
month
year
decade 十年
century 世紀
millennium ミレニアム

サンプルで取得結果を確認してみましょう。

mydb=# SELECT DATE_TRUNC('hour', timestamp '2020-08-17 15:02:40');
     date_trunc      
---------------------
 2020-08-17 15:00:00
(1 row)

このように、hour(時間)までを表示し、「分」と「秒」だけ切り捨てられました。

month(月)以下を切り捨てる

month(月)以下を切り捨てたい場合は、第1引数を「month」にすればOKです。

mydb=# SELECT DATE_TRUNC('month', timestamp '2020-08-17 15:02:40');
     date_trunc      
---------------------
 2020-08-01 00:00:00
(1 row)

取得結果は上記のようになります。

MySQLでは「DATE_FORMAT関数」で擬似的に切り捨て可能

MySQLでは、TRUNC関数やDATE_TRUNC関数のように日付・時間の切り捨てができる関数が用意されていません。

あえて擬似的に似た処理をするSQLクエリを書くのであれば、「DATE_FORMAT関数」を使って以下のように記述します。

mysql> SELECT DATE_FORMAT(CURRENT_DATE,'%Y-%m-01');
+--------------------------------------+
| DATE_FORMAT(CURRENT_DATE,'%Y-%m-01') |
+--------------------------------------+
| 2020-08-01                           |
+--------------------------------------+
1 row in set (0.00 sec)

これでTRUNC関数やDATE_TRUNC関数のように、日付の切り捨てができています。

時間を切り捨てる

時間を切り捨てる場合は、第1引数に次の要素を指定しましょう。

mydb=# SELECT DATE_TRUNC('minute', timestamp '2020-08-17 15:02:40');
     date_trunc      
---------------------
 2020-08-17 15:02:00
(1 row)

取得結果は上記のようになります。

データ全部を削除するTRUNCATE関数

TRUNC関数と似た関数に「TRUNCATE関数」があります。

MySQLではTRUNCATE関数を使う」で紹介しましたが、Oracle DatabaseやPostgreSQLではテーブル内のデータを全削除する関数として使われます。

TRUNC関数とは処理が大きく異なるため、使い分けには注意しましょう。

TRUNCATE関数の構文

TRUNCATE関数は次のように記述して使います。

TRUNCATE TABLE テーブル名

TRUNCATE関数は、データをすべて削除する関数のためWHERE句などで削除するデータを指定できません。

サンプルで処理を確認してみましょう。

ここでは、以下の「sample_tb」テーブルのデータを削除します。

mydb=# SELECT * FROM sample_tb;
 id |   name   | gender 
----+----------+--------
  2 | potepan2 | female
  3 | potepan3 | female
  4 | potepan4 | male
  5 | potepan5 | male
  1 | potepan  | male
(5 rows)
mydb=# TRUNCATE TABLE sample_tb;
TRUNCATE TABLE

上記のように、「TRUNCATE TABLE」と表示されれば削除完了です。

もう一度テーブル内のデータを確認してみると、削除されているのがわかります。

 id | name | gender 
----+------+--------
(0 rows)

WHERE句で条件を指定しようとすると、以下のようにエラーが表示されます。

mydb=# TRUNCATE TABLE sample_tb2 WHERE city = 'Tokyo';
ERROR:  syntax error at or near "WHERE"
LINE 1: TRUNCATE TABLE sample_tb2 WHERE city = 'Tokyo';

まとめ

SQLのTRUNC関数について解説しました。

TRUNC関数は、数値や日時を任意の位置で切り取れる関数で、データを整形した状態で取得したい場合に有効活用できます。

DBMSごとに関数名が異なるので、使用DBに合わせて関数は確認して使いましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。