PostgreSQL | PostgreSQL 基本構文 | 算術演算子を使用する

算術演算子は四則演算などの計算のほか、平方根や階乗などにも使用する。ここでは、算術演算子の使い方について説明する。

算術演算子の種類と使い方

PostgreSQL で使用できる算術演算子は次のとおりである。

+   加算       2 + 3    ->  5
-   減算       2 - 3    ->  -1
*   乗算       2 * 3    ->  6
/   除算       4 / 2    ->  2  ※ 整数の除算では余りを捨てる
%   剰余       5 % 4    ->  1
^   累乗       2.0^3.0  ->  8  ※ 左から右に適用
|/  平方根     |/25.0   ->  5
||/ 立方根     ||/27.0  ->  3
!   階乗       5!       ->  120
!!  階乗       !!5      ->  120  ※ 前置演算子
@   絶対値     @-5.0    ->  5

上記の算術演算子は、すべての数値データ型で使用できる。

実際に試してみる。次のようなテストテーブルを作成する。

mydb=# create table test( num1 real,  num2 real);
CREATE TABLE
mydb=#

次のようなデータをテーブルに追加する。

mydb=# insert into test values (15.4, 7.25), (-5.9, 9.0), (18.225, -7.3);
INSERT 0 3
mydb=# select * from test;
  num1  | num2
--------+------
   15.4 | 7.25
   -5.9 |    9
 18.225 | -7.3
(3 行)

そして SELECT コマンドを使用し、num1 カラムと num2 カラムに対して演算を行った結果を取得してみる。

mydb=# select num1, num2,
mydb-#   num1 + num2 as "num1 + num2",
mydb-#   num1 * num2 as "num1 * num2",
mydb-#   num1 / num2 as "num1 / num2"
mydb-# from test;
  num1  | num2 | num1 + num2 | num1 * num2 | num1 / num2
--------+------+-------------+-------------+-------------
   15.4 | 7.25 |       22.65 |  111.649994 |   2.1241379
   -5.9 |    9 |         3.1 |  -53.100002 | -0.65555555
 18.225 | -7.3 |      10.925 |  -133.04251 |  -2.4965754
(3 行)

算術演算子を使用して、カラムに保存されている値に対する演算結果を取得できる。

ビット演算子を使用する

算術演算子には、他にもビット演算を行う演算子が用意されている。

&   ビット AND          91 & 15  ->  11
|   ビット OR           32 | 3   ->  35
#   ビット XOR          17 # 5   ->  20
~   ビット NOT          ~1       ->  -2
<<  ビット左シフト      1 << 4   ->  16
>>  ビット右シフト      8 >> 2   ->  2

ビット演算子は、整数データ型またはビット文字列で使用できる。

ビット AND 演算子は、左辺と右辺の同じ位置にあるビットを比較し、両方のビットが 1 の場合にのみ 1 にする。

85 & 15

0000000001010101 = 85
0000000000001111 = 15
------------------------
0000000000000101 = 5

ビット OR 演算子は、左辺と右辺の同じ位置にあるビットを比較し、どちらか一方でもビットが 1 の場合に 1 にする。

85 | 15

0000000001010101 = 85
0000000000001111 = 15
------------------------
0000000001011111 = 95

ビット XOR 演算子は、左辺と右辺の同じ位置にあるビットを比較し、どちらか一方だけが 1 の場合に 1 にする。両方が 1、または両方が 0 の場合は 0 にする。

85 # 15

0000000001010101 = 85
0000000000001111 = 15
------------------------
0000000001011010 = 90

ビット NOT 演算子は、右辺の値の各ビットを反転させる。つまり、0 なら 11 なら 0 にする。

~ 85

0000000001010101 = 85
------------------------
1111111110101010 = -86

ビット左シフトは、対象の値を指定した数だけ左へ移動する。

85 << 2

0000000001010101 = 85
------------------------
0000000101010100 = 340

ビット右シフトは、対象の値を指定した数だけ右へ移動する。

85 >> 2

0000000001010101 = 85
------------------------
0000000000010101 = 21

SELECT コマンドを使用して簡単に試してみる。

mydb=# select 85 & 15 as "85 & 15",
mydb-#   85 | 15 as "85 | 15",
mydb-#   85 # 15 as "85 # 15",
mydb-#   ~ 85 as "~ 85",
mydb-#   85 << 2 as "85 << 2",
mydb-#   85 >> 2 as "85 >> 2";
 85 & 15 | 85 | 15 | 85 # 15 | ~ 85 | 85 << 2 | 85 >> 2
---------+---------+---------+------+---------+---------
       5 |      95 |      90 |  -86 |     340 |      21
(1 行)

ビット演算子を使用して演算した結果を取得できる。

ここまで、PostgreSQL で提供される算術演算子の使い方について説明した。