| PostgreSQL | ||
|---|---|---|
| Prev | Next | |
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 IN | 3 !!= 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 コマンドがあります。
| Prev | Home | Next |
| 座標型 | Up | 関数 |