Chapter 4. 演算子

Table of Contents
辞書的な優先順位
一般的な演算子
算術演算子
座標演算子
時間間隔演算子
IP V4 CIDR 演算子
IP V4 INET 演算子

Postgres にて使用可能な組み込み演 算子について説明します。

Postgres はシステム型に対して多くの 組み込み演算子を提供しています。これらの演算子はシステムカタロ グ pg_operator で定義されています。pg_operator の各エントリは、 演算子を実装したプロシージャ名と入出力の型に関する OIDs クラスを含んでいます。

文字列連結演算子 "||" の全種類を表示したい場合は、以下 を入力します。

    SELECT oprleft, oprright, oprresult, oprcode
    FROM pg_operator WHERE oprname = '||';

oprleft|oprright|oprresult|oprcode
-------+--------+---------+-------
     25|      25|       25|textcat
   1042|    1042|     1042|textcat
   1043|    1043|     1043|textcat
(3 rows)
   

ユーザは次のように演算子名を使って演算子を使用することもでき ます。

select * from emp where salary < 40000;
   
他にも、ユーザは演算子を実装した関数を直接呼び出すこともでき ます。この場合、上の問い合わせは次のように表すことになります。
select * from emp where int4lt(salary, 40000);
   

psql には、演算子を表示するコマンド ( \dd )があります。 (訳注: \do コマンドの間違いです。)

辞書的な優先順位

演算子には優先順位があります。現在それはパーサのコードに直接記 述されています。ほとんどの演算子は同じ優先順位を持ち、左から評 価されていきます。この優先順位が原因で、思いがけない振舞いをする ことがあります。例えば、ブール演算子 "<" と ">" という組は、 ブール演算子 "<=" と ">=" の組が持つ優先順位と異なる優先順 位を持っています。

Table 4-1. 演算子の順序(優先順位の高い順)

要素優先順位説明
UNIONSQL select を構築する
:: Postgres における型キャスト
[ ]配列の区切り文字
.テーブル/カラムの区切り文字
-単項負数
;文の終端、対数
:指数
|間隔の開始点
 乗算、除算
+ -加算、減算
IS TRUE、FALSE、NULL かどうかを試験する。
ISNULL NULL かどうかを試験する。
NOTNULL 非 NULL かどうかを試験する。
(その他全ての演算子) 固有、ユーザ定義
IN メンバーシップの設定
BETWEEN 含有
LIKE 文字列パターンの一致
< > 等しくない(ブール値)
=等しい
NOT否定
AND論理積
OR論理和