他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

9.3. 算術関数と演算子

PostgreSQLの数多くの型に対する算術演算子が用意されています。 標準算術表現法が存在しない型(例えば、日付/時刻データ型)については、後続する節で実際の動作を説明します。

表 9.4は使用可能な算術演算子を示しています。

表9.4 算術演算子

演算子名説明結果
+ 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.13に示すように、bitbit varyingビット文字列型に対しても使用することができます。

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

表9.5 算術関数

関数戻り値型説明結果
abs(x) (入力と同じ)絶対値abs(-17.4)17.4
cbrt(dp) dp立方根cbrt(27.0)3
ceil(dp or numeric) 引数より大きいか等しく、引数に最も近い整数ceil(-42.8)-42 
ceiling(dp or numeric) (入力型と同一)引数より大きいか等しく、引数に最も近い整数(ceilと同じ)ceiling(-95.3)-95
degrees(dp) dpラジアンを度に変換degrees(0.5)28.6478897565412
div(y numeric, x numeric) numericy/xの整数商div(9,4)2
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
power(a dp, b dp) dpabpower(9.0, 3.0)729
power(a numeric, b numeric)numericabpower(9.0, 3.0)729
radians(dp) dp度をラジアンに変換radians(45.0)0.785398163397448
round(dp or numeric) (入力型と同一)四捨五入round(42.4)42
round(v numeric, s int)numeric四捨五入して小数点第s位までにするround(42.4382, 2)42.44
scale(numeric) integer引数の位取り(小数点以下の十進の桁数)scale(8.41)2
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 int)numeric小数点第s位までで切り捨てtrunc(42.4382, 2)42.43
width_bucket(operand dp, b1 dp, b2 dp, count int)intb1からb2までの範囲に広がる等幅でバケット数countのヒストグラムにおいて、operandが割り当てられるバケット番号を返す。 範囲の外側の入力値に対しては0またはcount+1を返す。width_bucket(5.35, 0.024, 10.06, 5)3
width_bucket(operand numeric, b1 numeric, b2 numeric, count int)intb1からb2までの範囲に広がる等幅でバケット数countのヒストグラムにおいて、operandが割り当てられるバケット番号を返す。 範囲の外側の入力値に対しては0またはcount+1を返す。width_bucket(5.35, 0.024, 10.06, 5)3
width_bucket(operand anyelement, thresholds anyarray)intバケットの下限値を列挙した配列に対し、operandが割り当てられるバケット番号を返す。 入力値が最初の下限値より小さいときは0を返す。 配列thresholdsは最小のものを先頭にソートされている必要があり、そうでなければ期待と異なる結果になる。width_bucket(now(), array['yesterday', 'today', 'tomorrow']::timestamptz[])2

表 9.6に乱数を生成する関数を示します。

表9.6 乱数関数

関数戻り値型説明
random() dp0.0 <= x < 1.0の範囲の乱数値
setseed(dp) void今後のrandom()呼び出しで使用されるシード(種)の設定(-1.0から1.0までの境界を含む値)

random()が返す値の特徴はシステムの実装に依存します。 暗号への利用は適していません。代わりにpgcryptoモジュールを参照してください。

最後に、使用可能な三角関数を表 9.7に示します。 全ての三角関数はdouble precisionデータ型の引数と戻り値を取ります。 それぞれの三角関数には、角度の単位をラジアンにするものと度にするものの2種類があります。

表9.7 三角関数

関数(ラジアン)関数(度)説明
acos(x) acosd(x) 逆余弦関数
asin(x) asind(x) 逆正弦関数
atan(x) atand(x) 逆正接関数
atan2(y, x) atan2d(y, x) y/xの逆正接関数
cos(x) cosd(x) 余弦関数
cot(x) cotd(x) 余接関数
sin(x) sind(x) 正弦関数
tan(x) tand(x) 正接関数

注記

度単位の角度を扱う別の方法は、前に示した単位変換関数radians()degrees()を使うことです。 しかし、角度を使う方法の方が、sind(30)のような特別な場合の丸め誤差を避けられるため、推奨されます。