| PostgreSQL User's Guide | ||
|---|---|---|
| Prev | Next | |
Postgres provides a large number of built-in operators on system types. These operators are declared in the system catalog pg_operator. Every entry in pg_operator includes the name of the procedure that implements the operator and the class OIDs of the input and output types.
To view all variations of the “||” string concatenation operator, try
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 5-1. Postgres Operators
| Operator | Description | Usage |
|---|---|---|
| < | Less than? | 1 < 2 |
| <= | Less than or equal to? | 1 <= 2 |
| <> | Not equal? | 1 <> 2 |
| = | Equal? | 1 = 1 |
| > | Greater than? | 2 > 1 |
| >= | Greater than or equal to? | 2 >= 1 |
| || | Concatenate strings | 'Postgre' || 'SQL' |
| !!= | NOT IN | 3 !!= i |
| ~~ | LIKE | 'scrappy,marc,hermit' ~~ '%scrappy%' |
| !~~ | NOT LIKE | 'bruce' !~~ '%al%' |
| ~ | Match (regex), case sensitive | 'thomas' ~ '*.thomas*.' |
| ~* | Match (regex), case insensitive | 'thomas' ~* '*.Thomas*.' |
| !~ | Does not match (regex), case sensitive | 'thomas' !~ '*.Thomas*.' |
| !~* | Does not match (regex), case insensitive | 'thomas' !~ '*.vadim*.' |
Table 5-2. Postgres Numerical Operators
| Operator | Description | Usage |
|---|---|---|
| ! | Factorial | 3 ! |
| !! | Factorial (left operator) | !! 3 |
| % | Modulo | 5 % 4 |
| % | Truncate | % 4.5 |
| * | Multiplication | 2 * 3 |
| + | Addition | 2 + 3 |
| - | Subtraction | 2 - 3 |
| / | Division | 4 / 2 |
| : | Natural Exponentiation | : 3.0 |
| ; | Natural Logarithm | (; 5.0) |
| @ | Absolute value | @ -5.0 |
| ^ | Exponentiation | 2.0 ^ 3.0 |
| |/ | Square root | |/ 25.0 |
| ||/ | Cube root | ||/ 27.0 |
Table 5-3. Postgres Geometric Operators
| Operator | Description | Usage |
|---|---|---|
| + | Translation | '((0,0),(1,1))'::box + '(2.0,0)'::point |
| - | Translation | '((0,0),(1,1))'::box - '(2.0,0)'::point |
| * | Scaling/rotation | '((0,0),(1,1))'::box * '(2.0,0)'::point |
| / | Scaling/rotation | '((0,0),(2,2))'::box / '(2.0,0)'::point |
| # | Intersection | '((1,-1),(-1,1))' # '((1,1),(-1,-1))' |
| # | Number of points in polygon | # '((1,0),(0,1),(-1,0))' |
| ## | Point of closest proximity | '(0,0)'::point ## '((2,0),(0,2))'::lseg |
| && | Overlaps? | '((0,0),(1,1))'::box && '((0,0),(2,2))'::box |
| &< | Overlaps to left? | '((0,0),(1,1))'::box &< '((0,0),(2,2))'::box |
| &> | Overlaps to right? | '((0,0),(3,3))'::box &> '((0,0),(2,2))'::box |
| <-> | Distance between | '((0,0),1)'::circle <-> '((5,0),1)'::circle |
| << | Left of? | '((0,0),1)'::circle << '((5,0),1)'::circle |
| <^ | Is below? | '((0,0),1)'::circle <^ '((0,5),1)'::circle |
| >> | Is right of? | '((5,0),1)'::circle >> '((0,0),1)'::circle |
| >^ | Is above? | '((0,5),1)'::circle >^ '((0,0),1)'::circle |
| ?# | Intersects or overlaps | '((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::box; |
| ?- | Is horizontal? | '(1,0)'::point ?- '(0,0)'::point |
| ?-| | Is perpendicular? | '((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg |
| @-@ | Length or circumference | @-@ '((0,0),(1,0))'::path |
| ?| | Is vertical? | '(0,1)'::point ?| '(0,0)'::point |
| ?|| | Is parallel? | '((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg |
| @ | Contained or on | '(1,1)'::point @ '((0,0),2)'::circle |
| @@ | Center of | @@ '((0,0),10)'::circle |
| ~= | Same as | '((0,0),(1,1))'::polygon ~= '((1,1),(0,0))'::polygon |
The time interval data type tinterval is a legacy from the original date/time types and is not as well supported as the more modern types. There are several operators for this type.
Table 5-4. Postgres Time Interval Operators
| Operator | Description | Usage |
|---|---|---|
| #< | Interval less than? | |
| #<= | Interval less than or equal to? | |
| #<> | Interval not equal? | |
| #= | Interval equal? | |
| #> | Interval greater than? | |
| #>= | Interval greater than or equal to? | |
| <#> | Convert to time interval | |
| << | Interval less than? | |
| | | Start of interval | |
| ~= | Same as | |
| <?> | Time inside interval? |
Users may invoke operators using the operator name, as in:
select * from emp where salary < 40000;Alternatively, users may call the functions that implement the operators directly. In this case, the query above would be expressed as:
select * from emp where int4lt(salary, 40000);
psql has a \dd command to show these operators.
| Prev | Home | Next |
| Geometric Types | Functions |