本記事では以下の関数を見ていきます.
- 四捨五入:
ROUND() - 切り捨て:
TRUNC() - 大きい側の整数を取得(切り上げ):
CEIL() - 小さい側の整数を取得:
FLOOR() - 小数点以下の桁数を数える:
SCALE()
例示を見ながら確認していきましょう.
PostgreSQLのバージョン
psql (PostgreSQL) 14.5
事前準備
本記事ではテーブルを作成せずにSELECT文だけを使用します.
四捨五入 ROUND()
四捨五入をするにはROUND()関数を使用します.
四捨五入したい数値を引数として渡すと小数点以下を四捨五入して返してくれます.
SELECT ROUND(10.4)
| round |
|---|
| 10 |
SELECT ROUND(10.5)
| round |
|---|
| 11 |
表示する小数点以下の位を指定
表示したい小数点以下の位を第二引数で指定することもできます.
以下の例では小数点第一位まで表示するので,小数点第二位が四捨五入されています.
SELECT ROUND(10.554, 1)
| round |
|---|
| 10.6 |
参考
第二引数のデフォルトは0(小数点以下で四捨五入)です.
引数を負にすると整数部分での四捨五入もできます.
小数点を起点に2番目なので,十の位で四捨五入されています.
SELECT ROUND(150.554, -2)
| round |
|---|
| 200 |
注意
ROUND()は引数として渡すデータ型に依存して返り値が決まります.
渡すデータ型によっては挙動が異なる例もあるようなので,データ型に注意が必要です.
切り捨て TRUNC()
数値の切り捨てにはTRUNC()を使用します.(使い方はROUND()と同様です)
第一引数に数値を渡すと小数点以下を切り捨てて返してくれます.
SELECT TRUNC(198.9)
| trunc |
|---|
| 198 |
ROUND()と同様にTRUNC()も表示したい小数点以下の位を第二引数で指定できます.1
以下の例では小数点第二位まで表示するので,小数点第三位以下を切り捨てています.
SELECT TRUNC(198.992, 2)
| trunc |
|---|
| 198.99 |
ROUND()と同様に第二引数を負の数にすると整数部分での切り捨てもできます.
SELECT TRUNC(198.992, -1)
| trunc |
|---|
| 190 |
大きい側の整数を取得(切り上げ)CEIL()
ややトリッキーな関数ですが,まずはコードを見てみましょう.
SELECT CEIL(10.1)
| ceil |
|---|
| 11 |
結果は11となりました.
これは引数の数値について,大きい側の整数を取っているためです.
CEIL()は引数が正の値であれば切り上げと同じ挙動です.
10 ・・ 10.1 ・・・・・ 11
↑ 引数
引数が負の値であっても大きい側の値を取ります.
ただし,正の値とは異なり切り上げとは違う挙動です.
SELECT CEIL(-10.1)
| ceil |
|---|
| -10 |
切り上げにはなっておらず,大きい方の値を取っています.
-11 ・・・・・ -10.1 ・・ -10
↑ 引数
参考
CEIL()はCEILING()と同一の関数です.
なおCEIL()に整数を渡すとそのまま帰ってきます(SELECT CEIL(10) -> 10)
小さい側の整数を取得(切り捨て)FLOOR()
FLOOR()はCEIL()の逆の挙動をする関数です.
SELECT FLOOR(10.1)
| floor |
|---|
| 10 |
結果が10となったのは,以下のように引数の数値の小さい側の整数を取っているためです.
FLOOR()は引数が正の値であれば切り捨てと同じ挙動です.
10 ・・ 10.1 ・・・・・ 11
↑ 引数
引数が負の値であっても小さい側の値を取ります.
ただし,正の値とは異なり切り捨てとは違う挙動です.
SELECT FLOOR(-10.1)
| floor |
|---|
| -11 |
切り捨てにはなっておらず,小さい方の値を取っています.
-11 ・・・・・ -10.1 ・・ -10
↑ 引数
小数点以下の桁数を数える SCALE()
小数点以下の桁数を数える関数もあります.
SELECT SCALE(1.23456789)
| scale |
|---|
| 8 |
ひとこと
小数点まわりの操作をさらっと見てみました.
SQLでデータを取得する際に必要に応じて使えそうな内容ですね.
-
第二引数のデフォルトも
ROUND()と同様に0(小数点以下で切り捨て)です. ↩