PostgreSQL
PrevNext

Chapter 9. 演算子

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)

Table 9-1. Postgres 演算子

演算子説明使用法
< より小さい1 < 2
<= より小さいか等しい1 <= 2
<> 等しくない1 <> 2
= 等しい1 = 1
> より大きい2 > 1
>= より大きいか等しい2 >= 1
|| 文字列の連結'Postgre' || 'SQL'
!!= NOT IN3 !!= i
~~ LIKE'scrappy,marc,hermit' ~~ '%scrappy%'
!~~ NOT LIKE'bruce' !~~ '%al%'
~ (正規表現に)マッチする、大文字小文字を意識する'thomas' ~ '*.thomas*.'
~* (正規表現に)マッチする、大文字小文字を意識しない'thomas' ~* '*.Thomas*.'
!~ (正規表現に)マッチしない、大文字小文字を意識する'thomas' !~ '*.Thomas*.'
!~* (正規表現に)マッチしない、大文字小文字を意識しない'thomas' !~ '*.vadim*.'

Table 9-2. Postgres 数値演算子

演算子説明使用法
! 階乗3 !
!! 階乗(左演算子)!! 3
% 剰余5 % 4
% 切り捨て% 4.5
* 乗算2 * 3
+ 加算2 + 3
- 減算2 - 3
/ 除算4 / 2
: 自然指数: 3.0
; 自然対数(; 5.0)
@ 絶対値@ -5.0
^ 指数2.0 ^ 3.0
|/ 平方根|/ 25.0
||/ 立方根||/ 27.0

Table 9-3. Postgres 座標演算子

演算子説明使用法
+ 変換'((0,0),(1,1))'::box + '(2.0,0)'::point
- 変換'((0,0),(1,1))'::box - '(2.0,0)'::point
* スケーリング/回転'((0,0),(1,1))'::box * '(2.0,0)'::point
/ スケーリング/回転'((0,0),(2,2))'::box / '(2.0,0)'::point
# 交点'((1,-1),(-1,1))' # '((1,1),(-1,-1))'
# 多角形における頂点の数# '((1,0),(0,1),(-1,0))'
## 近接点'(0,0)'::point ## '((2,0),(0,2))'::lseg
&& 重なるか'((0,0),(1,1))'::box && '((0,0),(2,2))'::box
&< 左に重なるか'((0,0),(1,1))'::box &< '((0,0),(2,2))'::box
&> 右に重なるか'((0,0),(3,3))'::box &> '((0,0),(2,2))'::box
<-> 間の距離'((0,0),1)'::circle <-> '((5,0),1)'::circle
<< 左にあるか'((0,0),1)'::circle << '((5,0),1)'::circle
<^ 下にあるか'((0,0),1)'::circle <^ '((0,5),1)'::circle
>> 右にあるか'((5,0),1)'::circle >> '((0,0),1)'::circle
>^ 上にあるか'((0,5),1)'::circle >^ '((0,0),1)'::circle
?# 接するまたは重なるか'((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::box;
?- 横か'(1,0)'::point ?- '(0,0)'::point
?-| 垂直か'((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg
@-@ 長さまたは円周e@-@ '((0,0),(1,0))'::path
?| 縦か'(0,1)'::point ?| '(0,0)'::point
?|| 平行か'((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg
@ 〜に含まれるか、上にある'(1,1)'::point @ '((0,0),2)'::circle
@@ 〜の中心点@@ '((0,0),10)'::circle
~= 〜と同一'((0,0),(1,1))'::polygon ~= '((1,1),(0,0))'::polygon

時刻間隔データ型 tinterval はオリジナルの日付/時刻型 からの遺物であり、より現代的な型としてはもはやサポートされていません。 この型にはいくつかの演算子があります。

Table 9-4. Postgres 時刻間隔演算子

演算子説明使用法
#< 間隔がより小さい
#<= 間隔がより小さいか等しい
#<> 間隔が等しくない
#= 間隔が等しい
#> 間隔がより大きい
#>= 間隔がより大きいか等しい
<#> 時刻間隔への変換
<< 間隔がより小さい
| 間隔の開始
~= 〜と同じ
<?> 時刻が間隔の間にあるか

ユーザは演算子名を使って、以下のように演算子を呼び出す ことができます。

select * from 従業員 where 給与 < 40000;
もしくは、演算子を実装している関数を直に呼び出すこともできます。 このケースでは、上の問い合わせは以下のように表すことができます。
select * from 従業員 where int4lt(給与, 40000);

psql には、これらの演算子を表示するための \dd コマンドがあります。


PrevHomeNext
座標型Up関数