9.3. 算術関数と演算子

PostgreSQLの数多くの型に対する算術演算子が用意されています。 すべての可能な演算に対して一般的な算術規約のない型(たとえば、日付/時刻データ型)については、後続する節で実際の動作を説明します。

表9-2に、使用可能な算術演算子を示します。

表 9-2. 算術演算子

演算子名説明結果
+ 2 + 35
- 2 - 3-1
* 2 * 36
/ 商 (整数の割り算では余りを切り捨て)4 / 22
% 剰余 (余り)5 % 41
^ 羃乗2.0 ^ 3.08
|/ 平方根|/ 25.05
||/ 立方根||/ 27.03
! 階乗5 !120
!! 階乗 (前置演算子)!! 5120
@ 絶対値@ -5.05
& バイナリのAND91 & 1511
| バイナリの OR32 | 335
# バイナリの XOR17 # 520
~ バイナリの NOT~1-2
<< バイナリの左シフト1 << 416
>> バイナリの右シフト8 >> 22

また、表9-3に示すように、ビット演算子はビット列データ型bitおよびbit varyingに対して使用できます。 &|、および#に対するビット列引数は同じ長さでなければなりません。 下記の表で示されているように、ビットシフトの場合元のビット列の長さは保持されます。

表 9-3. ビット列に対するビット演算子

結果
B'10001' & B'01101'00001
B'10001' | B'01101'11101
B'10001' # B'01101'11110
~ B'10001'01110
B'10001' << 301000
B'10001' >> 200100

表9-4に使用可能な算術関数を示します。 この表内のdpは、double precisionを意味します。 これら関数の多くは、異なる引数型を持つ複数の形で提供されています。 特別な場合を除き、ある任意形式の関数はその引数と同じデータ型を返します。 double precisionデータに対する関数のほとんどはホストシステムのCライブラリの上層に実装されています。 このため、境界近くの場合の精度と振舞はホストシステムに依存して変わります。

表 9-4. 算術関数

関数返り値型説明結果
abs(x)(x と同じ)絶対値abs(-17.4)17.4
cbrt(dp)dp立方根cbrt(27.0)3
ceil(dp or numeric)(入力型と同一)引数より小さくない最小の整数ceil(-42.8)-42
degrees(dp)dpラジアンに対応する度degrees(0.5)28.6478897565412
exp(dp or numeric)(入力型と同一)指数exp(1.0)2.71828182845905
floor(dp or numeric)(入力型と同一)引数より大きくない最大の整数floor(-42.8)-43
ln(dp or numeric)(入力型と同一)自然対数ln(2.0)0.693147180559945
log(dp or numeric)(入力型と同一)10 を底とした対数(常用対数)log(100.0)2
log(b numeric, x numeric)numericbを底とした対数log(2.0, 64.0)6.0000000000
mod(y, x)(引数の型と同じ)y/x の剰余mod(9,4)1
pi()dp"円周率(π)" 定数pi()3.14159265358979
pow(a dp, b dp)dpabpow(9.0, 3.0)729
pow(a numeric, b numeric)numericabpow(9.0, 3.0)729
radians(dp)dp度に対応するラジアンradians(45.0)0.785398163397448
random()dp0.0〜1.0の乱数値random() 
round(dp or numeric)(入力型と同一)四捨五入round(42.4)42
round(v numeric, s integer)numericsの桁で四捨五入round(42.4382, 2)42.44
setseed(dp)int32後のrandom()呼出しで使用する種を設定setseed(0.54823)1177314959
sign(dp or numeric)(入力型と同一)引数の符号(-1, 0, +1)sign(-8.4)-1
sqrt(dp or numeric)(入力型と同一)平方根sqrt(2.0)1.4142135623731
trunc(dp or numeric)(入力型と同一)切捨てtrunc(42.8)42
trunc(v numeric, s integer)numericsの桁で切捨てtrunc(42.4382, 2)42.43

最後に、使用可能な三角関数を表9-5に示します。 すべての三角関数はdouble precisionデータ型の引数と返り値をとります。

表 9-5. 三角関数

関数説明
acos(x)逆余弦関数
asin(x)逆正弦関数
atan(x)逆正接関数
atan2(x, y)x/yの逆正接関数
cos(x)余弦関数
cot(x)余接関数
sin(x)正弦関数
tan(x)正接関数