Mathematical operators are provided for many <productname>PostgreSQL</productname> types. For types without standard mathematical conventions (e.g., date/time types) we describe the actual behavior in subsequent sections. PostgreSQLの数多くの型に対する算術演算子が用意されています。 標準算術表現法が存在しない型(例えば、日付/時刻データ型)については、後続する節で実際の動作を説明します。
<xref linkend="functions-math-op-table"/> shows the mathematical
operators that are available for the standard numeric types.
Unless otherwise noted, operators shown as
accepting <replaceable>numeric_type</replaceable> are available for all
the types <type>smallint</type>, <type>integer</type>,
<type>bigint</type>, <type>numeric</type>, <type>real</type>,
and <type>double precision</type>.
Operators shown as accepting <replaceable>integral_type</replaceable>
are available for the types <type>smallint</type>, <type>integer</type>,
and <type>bigint</type>.
Except where noted, each form of an operator returns the same data type
as its argument(s). Calls involving multiple argument data types, such
as <type>integer</type> <literal>+</literal> <type>numeric</type>,
are resolved by using the type appearing later in these lists.
表 9.4は標準の数値型で使用可能な算術演算子を示しています。
特に説明がない限り、numeric_type
を受け付けると表示されている演算子はすべてのsmallint
、integer
、bigint
、numeric
、real
、double precision
データ型で利用可能です。
integral_type
を受け付けると表示されている演算子はすべてのsmallint
、integer
、bigint
データ型で利用可能です。
特に説明がない限り、それぞれの演算子は引数と同じデータ型を返します。
integer
+
numeric
のように、複数の引数データ型が使われる呼び出しは、このリストの後で現れる型を使って解決されます。
表9.4 算術演算子
Operator 演算子 Description 説明 Example(s) 例 |
---|
Addition 和
|
Unary plus (no operation) 単項和(演算なし)
|
Subtraction 差
|
Negation 否定
|
Multiplication 積
|
Division (for integral types, division truncates the result towards zero) 商(整数型では、除算によってゼロへ余りが切り捨てられます)
|
Modulo (remainder); available for <type>smallint</type>,
<type>integer</type>, <type>bigint</type>, and <type>numeric</type>
剰余(余り)。
|
Exponentiation 累乗
Unlike typical mathematical practice, multiple uses of
<literal>^</literal> will associate left to right by default:
典型的な数学的用法とは違って、デフォルトでは
|
Square root 平方根
|
Cube root 立方根
|
Absolute value 絶対値
|
Bitwise AND ビットごとのAND
|
Bitwise OR ビットごとのOR
|
Bitwise exclusive OR ビットごとの排他的論理和
|
Bitwise NOT ビットごとのNOT
|
Bitwise shift left ビットごとの左シフト
|
Bitwise shift right ビットごとの右シフト
|
<xref linkend="functions-math-func-table"/> shows the available
mathematical functions.
Many of these functions are provided in multiple forms with different
argument types.
Except where noted, any given form of a function returns the same
data type as its argument(s); cross-type cases are resolved in the
same way as explained above for operators.
The functions working with <type>double precision</type> data are mostly
implemented on top of the host system's C library; accuracy and behavior in
boundary cases can therefore vary depending on the host system.
表 9.5に使用可能な算術関数を示します。
これら関数の多くは、異なる引数型を持つ複数の形で提供されています。
特に記述がある場合を除き、すべての形式の関数はその引数と同じデータ型を返します。
複数の型をまたがる場合は上記の演算子のところで説明したのと同じ方法で解決されます。
double precision
データに対する関数のほとんどはホストシステムのCライブラリの上層に実装されています。このため、精度と境界近くの場合の振舞いはホストシステムに依存して変わります。
表9.5 算術関数
<xref linkend="functions-math-random-table"/> shows functions for generating random numbers. 表 9.6に乱数を生成する関数を示します。
表9.6 乱数関数
The <function>random()</function> and <function>random_normal()</function>
functions listed in <xref linkend="functions-math-random-table"/> use a
deterministic pseudo-random number generator.
It is fast but not suitable for cryptographic
applications; see the <xref linkend="pgcrypto"/> module for a more
secure alternative.
If <function>setseed()</function> is called, the series of results of
subsequent calls to these functions in the current session
can be repeated by re-issuing <function>setseed()</function> with the same
argument.
Without any prior <function>setseed()</function> call in the same
session, the first call to any of these functions obtains a seed
from a platform-dependent source of random bits.
表 9.6にリストされているrandom()
とrandom_normal()
関数は、決定論的な擬似乱数生成器を使用しています。
高速ですが、暗号用途には適していません。より安全な代替手段についてはpgcryptoモジュールを参照してください。
setseed()
が呼び出されると、現在のセッション内での以後の一連のこれらの関数の呼び出し結果はsetseed()
を同じ引数で再実行することによって再現可能となります。
同じセッション内でsetseed()
をそれ以前に呼び出していない場合は、これらの関数のいずれかの最初の呼び出しによってプラットフォーム依存の乱数ビットのソースからシードを入手します。
<xref linkend="functions-math-trig-table"/> shows the available trigonometric functions. Each of these functions comes in two variants, one that measures angles in radians and one that measures angles in degrees. 使用可能な三角関数を表 9.7に示します。 それぞれの三角関数には、角度の単位をラディアンにするものと度にするものの2種類があります。
表9.7 三角関数
Another way to work with angles measured in degrees is to use the unit
transformation functions <literal><function>radians()</function></literal>
and <literal><function>degrees()</function></literal> shown earlier.
However, using the degree-based trigonometric functions is preferred,
as that way avoids round-off error for special cases such
as <literal>sind(30)</literal>.
度単位の角度を扱う別の方法は、前に示した単位変換関数
とradians()
を使うことです。
しかし、角度を使う方法の方が、degrees()
sind(30)
のような特別な場合の丸め誤差を避けられるため、推奨されます。
<xref linkend="functions-math-hyp-table"/> shows the available hyperbolic functions. 表 9.8に利用可能な双曲線関数を示します。
表9.8 双曲線関数