PostgreSQLの数多くの型に対する算術演算子が用意されています。 標準算術表現法が存在しない型(例えば、日付/時刻データ型)については、後続する節で実際の動作を説明します。
表 9.4は標準の数値型で使用可能な算術演算子を示しています。
特に説明がない限り、numeric_type
を受け付けると表示されている演算子はすべてのsmallint
、integer
、bigint
、numeric
、real
、double precision
データ型で利用可能です。
integral_type
を受け付けると表示されている演算子はすべてのsmallint
、integer
、bigint
データ型で利用可能です。
特に説明がない限り、それぞれの演算子は引数と同じデータ型を返します。
integer
+
numeric
のように、複数の引数データ型が使われる呼び出しは、このリストの後で現れる型を使って解決されます。
表9.4 算術演算子
演算子 説明 例 |
---|
和
|
単項和(演算なし)
|
差
|
否定
|
積
|
商(整数型では、除算によってゼロへ余りが切り捨てられます)
|
剰余(余り)。
|
累乗
典型的な数学的用法とは違って、デフォルトでは
|
平方根
|
立方根
|
絶対値
|
ビットごとのAND
|
ビットごとのOR
|
ビットごとの排他的論理和
|
ビットごとのNOT
|
ビットごとの左シフト
|
ビットごとの右シフト
|
表 9.5に使用可能な算術関数を示します。
これら関数の多くは、異なる引数型を持つ複数の形で提供されています。
特に記述がある場合を除き、すべての形式の関数はその引数と同じデータ型を返します。
複数の型をまたがる場合は上記の演算子のところで説明したのと同じ方法で解決されます。
double precision
データに対する関数のほとんどはホストシステムのCライブラリの上層に実装されています。このため、精度と境界近くの場合の振舞いはホストシステムに依存して変わります。
表9.5 算術関数
表 9.6に乱数を生成する関数を示します。
表9.6 乱数関数
random()
関数は単純な線形合同法を使用しています。
高速ですが、暗号用途には適していません。より安全な代替物としてpgcryptoモジュールを参照してください。
setseed()
が呼び出されると、現在のセッション内での以後の一連のrandom()
の呼び出し結果はsetseed()
を同じ引数で再実行することによって再現可能となります。
同じセッション内でsetseed()
をそれ以前に呼び出していない場合は、最初のrandom()
の呼び出しによってプラットフォーム依存の乱数ビットのソースからシードを入手します。
使用可能な三角関数を表 9.7に示します。 それぞれの三角関数には、角度の単位をラディアンにするものと度にするものの2種類があります。
表9.7 三角関数
度単位の角度を扱う別の方法は、前に示した単位変換関数
とradians()
を使うことです。
しかし、角度を使う方法の方が、degrees()
sind(30)
のような特別な場合の丸め誤差を避けられるため、推奨されます。
表 9.8に利用可能な双曲線関数を示します。
表9.8 双曲線関数