mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-18 18:44:06 +08:00
Merge functions and operators chapters. Lots of updates.
This commit is contained in:
parent
ea166f1146
commit
c3641483c3
@ -8,7 +8,7 @@
|
||||
#
|
||||
#
|
||||
# IDENTIFICATION
|
||||
# $Header: /cvsroot/pgsql/doc/src/sgml/Makefile,v 1.26 2000/11/24 17:44:21 petere Exp $
|
||||
# $Header: /cvsroot/pgsql/doc/src/sgml/Makefile,v 1.27 2000/12/14 22:30:56 petere Exp $
|
||||
#
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
@ -16,6 +16,7 @@ subdir = doc/src/sgml
|
||||
top_builddir = ../../..
|
||||
include $(top_builddir)/src/Makefile.global
|
||||
|
||||
.SECONDARY:
|
||||
|
||||
ifndef DOCBOOKSTYLE
|
||||
DOCBOOKSTYLE = /home/projects/pgsql/developers/thomas/db143.d/docbook
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.43 2000/12/03 14:47:18 thomas Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.44 2000/12/14 22:30:56 petere Exp $
|
||||
-->
|
||||
|
||||
<chapter id="datatype">
|
||||
@ -349,8 +349,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.43 2000/12/03 14:47:18 th
|
||||
|
||||
<para>
|
||||
The numeric types have a full set of corresponding arithmetic operators and
|
||||
functions. Refer to <xref linkend="numerical-operators">
|
||||
and <xref linkend="math-functions"> for more information.
|
||||
functions. Refer to <xref linkend="functions"> for more information.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/filelist.sgml,v 1.1 2000/11/24 17:44:21 petere Exp $ -->
|
||||
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/filelist.sgml,v 1.2 2000/12/14 22:30:56 petere Exp $ -->
|
||||
|
||||
<!entity about SYSTEM "about.sgml">
|
||||
<!entity history SYSTEM "history.sgml">
|
||||
@ -26,7 +26,6 @@
|
||||
<!entity inherit SYSTEM "inherit.sgml">
|
||||
<!entity manage SYSTEM "manage.sgml">
|
||||
<!entity mvcc SYSTEM "mvcc.sgml">
|
||||
<!entity oper SYSTEM "oper.sgml">
|
||||
<!entity plan SYSTEM "plan.sgml">
|
||||
<!entity plperl SYSTEM "plperl.sgml">
|
||||
<!entity plsql SYSTEM "plsql.sgml">
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,867 +0,0 @@
|
||||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/oper.sgml,v 1.22 2000/11/10 20:13:25 tgl Exp $
|
||||
-->
|
||||
|
||||
<Chapter Id="operators">
|
||||
<Title id="operators-title">Operators</Title>
|
||||
|
||||
<Abstract>
|
||||
<Para>
|
||||
Describes the built-in operators available in
|
||||
<ProductName>Postgres</ProductName>.
|
||||
</Para>
|
||||
</Abstract>
|
||||
|
||||
<Para>
|
||||
<ProductName>Postgres</ProductName> provides a large number of
|
||||
built-in operators on system types.
|
||||
These operators are declared in the system catalog
|
||||
<literal>pg_operator</literal>. Every entry in <literal>pg_operator</literal> includes
|
||||
the name of the procedure that implements the operator and the
|
||||
class <Acronym>OIDs</Acronym> of the input and output types.
|
||||
</Para>
|
||||
|
||||
<Para>
|
||||
To view all variations of the "<literal>||</literal>" string concatenation operator,
|
||||
try
|
||||
<ProgramListing>
|
||||
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)
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
|
||||
<Para>
|
||||
Users may invoke operators using the operator name, as in:
|
||||
|
||||
<ProgramListing>
|
||||
select * from emp where salary < 40000;
|
||||
</ProgramListing>
|
||||
|
||||
Alternatively, users may call the functions that implement the
|
||||
operators directly. In this case, the query above would be expressed
|
||||
as:
|
||||
<ProgramListing>
|
||||
select * from emp where int4lt(salary, 40000);
|
||||
</ProgramListing>
|
||||
</Para>
|
||||
|
||||
<Para>
|
||||
<Application>psql</Application>
|
||||
has a command (<Command>\dd</Command>) to show these operators.
|
||||
</Para>
|
||||
|
||||
<sect1 id="oper-precedence">
|
||||
<title>Lexical Precedence</title>
|
||||
|
||||
<para>
|
||||
Operators have a precedence which is currently hardcoded into the parser.
|
||||
Most operators have the same precedence and are left-associative. This may lead
|
||||
to non-intuitive behavior; for example the boolean operators "<" and ">"
|
||||
have a different precedence than the boolean operators "<=" and ">=".
|
||||
|
||||
<table tocentry="1">
|
||||
<title>
|
||||
Operator Ordering (decreasing precedence)
|
||||
</title>
|
||||
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Element</entry>
|
||||
<entry>Precedence</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>
|
||||
::
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
<productname>Postgres</productname> typecasting
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
[ ]
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
array delimiters
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
.
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
table/column delimiter
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
-
|
||||
</entry>
|
||||
<entry>
|
||||
right
|
||||
</entry>
|
||||
<entry>
|
||||
unary minus
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
|
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
start of interval
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
^
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
power, exclusive or
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
* / %
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
multiplication, division, modulo
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
+ -
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
addition, subtraction
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
IS
|
||||
</entry>
|
||||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
test for TRUE, FALSE, NULL
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
ISNULL
|
||||
</entry>
|
||||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
test for NULL
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
NOTNULL
|
||||
</entry>
|
||||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
test for NOT NULL
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
(all other operators)
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
native and user-defined
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
IN
|
||||
</entry>
|
||||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
set membership
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
BETWEEN
|
||||
</entry>
|
||||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
containment
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
OVERLAPS
|
||||
</entry>
|
||||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
time interval overlap
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
LIKE ILIKE
|
||||
</entry>
|
||||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
string pattern matching
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
< >
|
||||
</entry>
|
||||
<entry>
|
||||
</entry>
|
||||
<entry>
|
||||
inequality
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
=
|
||||
</entry>
|
||||
<entry>
|
||||
right
|
||||
</entry>
|
||||
<entry>
|
||||
equality
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
NOT
|
||||
</entry>
|
||||
<entry>
|
||||
right
|
||||
</entry>
|
||||
<entry>
|
||||
logical negation
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
AND
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
logical intersection
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
OR
|
||||
</entry>
|
||||
<entry>
|
||||
left
|
||||
</entry>
|
||||
<entry>
|
||||
logical union
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="general-operators">
|
||||
<title>General Operators</title>
|
||||
|
||||
<para>
|
||||
The operators listed here are defined for a number of native data types,
|
||||
ranging from numeric types to data/time types.
|
||||
</para>
|
||||
|
||||
<Para>
|
||||
<TABLE TOCENTRY="1">
|
||||
<TITLE><ProductName>Postgres</ProductName> Operators</TITLE>
|
||||
<TITLEABBREV>Operators</TITLEABBREV>
|
||||
<TGROUP COLS="3">
|
||||
<THEAD>
|
||||
<ROW>
|
||||
<ENTRY>Operator</ENTRY>
|
||||
<ENTRY>Description</ENTRY>
|
||||
<ENTRY>Usage</ENTRY>
|
||||
</ROW>
|
||||
</THEAD>
|
||||
<TBODY>
|
||||
<ROW>
|
||||
<ENTRY> < </ENTRY>
|
||||
<ENTRY>Less than?</ENTRY>
|
||||
<ENTRY>1 < 2</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <= </ENTRY>
|
||||
<ENTRY>Less than or equal to?</ENTRY>
|
||||
<ENTRY>1 <= 2</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <> </ENTRY>
|
||||
<ENTRY>Not equal?</ENTRY>
|
||||
<ENTRY>1 <> 2</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> = </ENTRY>
|
||||
<ENTRY>Equal?</ENTRY>
|
||||
<ENTRY>1 = 1</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> > </ENTRY>
|
||||
<ENTRY>Greater than?</ENTRY>
|
||||
<ENTRY>2 > 1</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> >= </ENTRY>
|
||||
<ENTRY>Greater than or equal to?</ENTRY>
|
||||
<ENTRY>2 >= 1</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> || </ENTRY>
|
||||
<ENTRY>Concatenate strings</ENTRY>
|
||||
<ENTRY>'Postgre' || 'SQL'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> !!= </ENTRY>
|
||||
<ENTRY>NOT IN</ENTRY>
|
||||
<ENTRY>3 !!= i</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ~~ </ENTRY>
|
||||
<ENTRY>LIKE</ENTRY>
|
||||
<ENTRY>'scrappy,marc,hermit' ~~ '%scrappy%'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> !~~ </ENTRY>
|
||||
<ENTRY>NOT LIKE</ENTRY>
|
||||
<ENTRY>'bruce' !~~ '%al%'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ~~* </ENTRY>
|
||||
<ENTRY>ILIKE</ENTRY>
|
||||
<ENTRY>'scrappy,marc,hermit' ~~* '%Scrappy%'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> !~~* </ENTRY>
|
||||
<ENTRY>NOT ILIKE</ENTRY>
|
||||
<ENTRY>'Bruce' !~~* '%al%'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ~ </ENTRY>
|
||||
<ENTRY>Match (regex), case sensitive</ENTRY>
|
||||
<ENTRY>'thomas' ~ '.*thomas.*'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ~* </ENTRY>
|
||||
<ENTRY>Match (regex), case insensitive</ENTRY>
|
||||
<ENTRY>'thomas' ~* '.*Thomas.*'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> !~ </ENTRY>
|
||||
<ENTRY>Does not match (regex), case sensitive</ENTRY>
|
||||
<ENTRY>'thomas' !~ '.*Thomas.*'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> !~* </ENTRY>
|
||||
<ENTRY>Does not match (regex), case insensitive</ENTRY>
|
||||
<ENTRY>'thomas' !~* '.*vadim.*'</ENTRY>
|
||||
</ROW>
|
||||
</TBODY>
|
||||
</TGROUP>
|
||||
</TABLE>
|
||||
</Para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="numerical-operators">
|
||||
<title>Numerical Operators</title>
|
||||
|
||||
<Para>
|
||||
<TABLE TOCENTRY="1">
|
||||
<TITLE><ProductName>Postgres</ProductName> Numerical Operators</TITLE>
|
||||
<TITLEABBREV>Operators</TITLEABBREV>
|
||||
<TGROUP COLS="3">
|
||||
<THEAD>
|
||||
<ROW>
|
||||
<ENTRY>Operator</ENTRY>
|
||||
<ENTRY>Description</ENTRY>
|
||||
<ENTRY>Usage</ENTRY>
|
||||
</ROW>
|
||||
</THEAD>
|
||||
<TBODY>
|
||||
<ROW>
|
||||
<ENTRY> ! </ENTRY>
|
||||
<ENTRY>Factorial</ENTRY>
|
||||
<ENTRY>3 !</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> !! </ENTRY>
|
||||
<ENTRY>Factorial (left operator)</ENTRY>
|
||||
<ENTRY>!! 3</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> % </ENTRY>
|
||||
<ENTRY>Modulo</ENTRY>
|
||||
<ENTRY>5 % 4</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> % </ENTRY>
|
||||
<ENTRY>Truncate</ENTRY>
|
||||
<ENTRY>% 4.5</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> * </ENTRY>
|
||||
<ENTRY>Multiplication</ENTRY>
|
||||
<ENTRY>2 * 3</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> + </ENTRY>
|
||||
<ENTRY>Addition</ENTRY>
|
||||
<ENTRY>2 + 3</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> - </ENTRY>
|
||||
<ENTRY>Subtraction</ENTRY>
|
||||
<ENTRY>2 - 3</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> / </ENTRY>
|
||||
<ENTRY>Division</ENTRY>
|
||||
<ENTRY>4 / 2</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> @ </ENTRY>
|
||||
<ENTRY>Absolute value</ENTRY>
|
||||
<ENTRY>@ -5.0</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ^ </ENTRY>
|
||||
<ENTRY>Exponentiation</ENTRY>
|
||||
<ENTRY>2.0 ^ 3.0</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> |/ </ENTRY>
|
||||
<ENTRY>Square root</ENTRY>
|
||||
<ENTRY>|/ 25.0</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ||/ </ENTRY>
|
||||
<ENTRY>Cube root</ENTRY>
|
||||
<ENTRY>||/ 27.0</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> & </ENTRY>
|
||||
<ENTRY>Binary AND</ENTRY>
|
||||
<ENTRY>91 & 15</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> | </ENTRY>
|
||||
<ENTRY>Binary OR</ENTRY>
|
||||
<ENTRY>32 | 3</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> # </ENTRY>
|
||||
<ENTRY>Binary XOR</ENTRY>
|
||||
<ENTRY>15 # 4</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ~ </ENTRY>
|
||||
<ENTRY>Binary NOT</ENTRY>
|
||||
<ENTRY>~1</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> << </ENTRY>
|
||||
<ENTRY>Binary shift left</ENTRY>
|
||||
<ENTRY>1 << 4</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> >> </ENTRY>
|
||||
<ENTRY>Binary shift right</ENTRY>
|
||||
<ENTRY>8 >> 2</ENTRY>
|
||||
</ROW>
|
||||
</TBODY>
|
||||
</TGROUP>
|
||||
</TABLE>
|
||||
</Para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="geometric-operators">
|
||||
<title>Geometric Operators</title>
|
||||
|
||||
<Para>
|
||||
<TABLE TOCENTRY="1">
|
||||
<TITLE><ProductName>Postgres</ProductName> Geometric Operators</TITLE>
|
||||
<TITLEABBREV>Operators</TITLEABBREV>
|
||||
<TGROUP COLS="3">
|
||||
<THEAD>
|
||||
<ROW>
|
||||
<ENTRY>Operator</ENTRY>
|
||||
<ENTRY>Description</ENTRY>
|
||||
<ENTRY>Usage</ENTRY>
|
||||
</ROW>
|
||||
</THEAD>
|
||||
<TBODY>
|
||||
<ROW>
|
||||
<ENTRY> + </ENTRY>
|
||||
<ENTRY>Translation</ENTRY>
|
||||
<ENTRY>'((0,0),(1,1))'::box + '(2.0,0)'::point</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> - </ENTRY>
|
||||
<ENTRY>Translation</ENTRY>
|
||||
<ENTRY>'((0,0),(1,1))'::box - '(2.0,0)'::point</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> * </ENTRY>
|
||||
<ENTRY>Scaling/rotation</ENTRY>
|
||||
<ENTRY>'((0,0),(1,1))'::box * '(2.0,0)'::point</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> / </ENTRY>
|
||||
<ENTRY>Scaling/rotation</ENTRY>
|
||||
<ENTRY>'((0,0),(2,2))'::box / '(2.0,0)'::point</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> # </ENTRY>
|
||||
<ENTRY>Intersection</ENTRY>
|
||||
<ENTRY>'((1,-1),(-1,1))' # '((1,1),(-1,-1))'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> # </ENTRY>
|
||||
<ENTRY>Number of points in polygon</ENTRY>
|
||||
<ENTRY># '((1,0),(0,1),(-1,0))'</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ## </ENTRY>
|
||||
<ENTRY>Point of closest proximity</ENTRY>
|
||||
<ENTRY>'(0,0)'::point ## '((2,0),(0,2))'::lseg</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> && </ENTRY>
|
||||
<ENTRY>Overlaps?</ENTRY>
|
||||
<ENTRY>'((0,0),(1,1))'::box && '((0,0),(2,2))'::box</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> &< </ENTRY>
|
||||
<ENTRY>Overlaps to left?</ENTRY>
|
||||
<ENTRY>'((0,0),(1,1))'::box &< '((0,0),(2,2))'::box</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> &> </ENTRY>
|
||||
<ENTRY>Overlaps to right?</ENTRY>
|
||||
<ENTRY>'((0,0),(3,3))'::box &> '((0,0),(2,2))'::box</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <-> </ENTRY>
|
||||
<ENTRY>Distance between</ENTRY>
|
||||
<ENTRY>'((0,0),1)'::circle <-> '((5,0),1)'::circle</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> << </ENTRY>
|
||||
<ENTRY>Left of?</ENTRY>
|
||||
<ENTRY>'((0,0),1)'::circle << '((5,0),1)'::circle</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <^ </ENTRY>
|
||||
<ENTRY>Is below?</ENTRY>
|
||||
<ENTRY>'((0,0),1)'::circle <^ '((0,5),1)'::circle</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> >> </ENTRY>
|
||||
<ENTRY>Is right of?</ENTRY>
|
||||
<ENTRY>'((5,0),1)'::circle >> '((0,0),1)'::circle</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> >^ </ENTRY>
|
||||
<ENTRY>Is above?</ENTRY>
|
||||
<ENTRY>'((0,5),1)'::circle >^ '((0,0),1)'::circle</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ?# </ENTRY>
|
||||
<ENTRY>Intersects or overlaps</ENTRY>
|
||||
<ENTRY>'((-1,0),(1,0))'::lseg ?# '((-2,-2),(2,2))'::box;</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ?- </ENTRY>
|
||||
<ENTRY>Is horizontal?</ENTRY>
|
||||
<ENTRY>'(1,0)'::point ?- '(0,0)'::point</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ?-| </ENTRY>
|
||||
<ENTRY>Is perpendicular?</ENTRY>
|
||||
<ENTRY>'((0,0),(0,1))'::lseg ?-| '((0,0),(1,0))'::lseg</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> @-@ </ENTRY>
|
||||
<ENTRY>Length or circumference</ENTRY>
|
||||
<ENTRY>@-@ '((0,0),(1,0))'::path</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ?| </ENTRY>
|
||||
<ENTRY>Is vertical?</ENTRY>
|
||||
<ENTRY>'(0,1)'::point ?| '(0,0)'::point</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ?|| </ENTRY>
|
||||
<ENTRY>Is parallel?</ENTRY>
|
||||
<ENTRY>'((-1,0),(1,0))'::lseg ?|| '((-1,2),(1,2))'::lseg</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> @ </ENTRY>
|
||||
<ENTRY>Contained or on</ENTRY>
|
||||
<ENTRY>'(1,1)'::point @ '((0,0),2)'::circle</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> @@ </ENTRY>
|
||||
<ENTRY>Center of</ENTRY>
|
||||
<ENTRY>@@ '((0,0),10)'::circle</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ~= </ENTRY>
|
||||
<ENTRY>Same as</ENTRY>
|
||||
<ENTRY>'((0,0),(1,1))'::polygon ~= '((1,1),(0,0))'::polygon</ENTRY>
|
||||
</ROW>
|
||||
</TBODY>
|
||||
</TGROUP>
|
||||
</TABLE>
|
||||
</Para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="interval-operators">
|
||||
<title>Time Interval Operators</title>
|
||||
|
||||
<Para>
|
||||
The time interval data type <Type>tinterval</Type> 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 TOCENTRY="1">
|
||||
<TITLE><ProductName>Postgres</ProductName> Time Interval Operators</TITLE>
|
||||
<TITLEABBREV>Operators</TITLEABBREV>
|
||||
<TGROUP COLS="3">
|
||||
<THEAD>
|
||||
<ROW>
|
||||
<ENTRY>Operator</ENTRY>
|
||||
<ENTRY>Description</ENTRY>
|
||||
<ENTRY>Usage</ENTRY>
|
||||
</ROW>
|
||||
</THEAD>
|
||||
<TBODY>
|
||||
<ROW>
|
||||
<ENTRY> #< </ENTRY>
|
||||
<ENTRY>Interval less than?</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> #<= </ENTRY>
|
||||
<ENTRY>Interval less than or equal to?</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> #<> </ENTRY>
|
||||
<ENTRY>Interval not equal?</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> #= </ENTRY>
|
||||
<ENTRY>Interval equal?</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> #> </ENTRY>
|
||||
<ENTRY>Interval greater than?</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> #>= </ENTRY>
|
||||
<ENTRY>Interval greater than or equal to?</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <#> </ENTRY>
|
||||
<ENTRY>Convert to time interval</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> << </ENTRY>
|
||||
<ENTRY>Interval less than?</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> | </ENTRY>
|
||||
<ENTRY>Start of interval</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> ~= </ENTRY>
|
||||
<ENTRY>Same as</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <?> </ENTRY>
|
||||
<ENTRY>Time inside interval?</ENTRY>
|
||||
<ENTRY></ENTRY>
|
||||
</ROW>
|
||||
</TBODY>
|
||||
</TGROUP>
|
||||
</TABLE>
|
||||
</Para>
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1 id="net-operators">
|
||||
<title>Network Address Type Operators</title>
|
||||
|
||||
<sect2 id="cidr-inet-operators">
|
||||
<title><type>cidr</> and <type>inet</> Operators</title>
|
||||
|
||||
<table tocentry="1" id="cidr-inet-operators-table">
|
||||
<title><type>cidr</> and <type>inet</> Operators</title>
|
||||
<TGROUP COLS="3">
|
||||
<THEAD>
|
||||
<ROW>
|
||||
<ENTRY>Operator</ENTRY>
|
||||
<ENTRY>Description</ENTRY>
|
||||
<ENTRY>Usage</ENTRY>
|
||||
</ROW>
|
||||
</THEAD>
|
||||
<TBODY>
|
||||
<ROW>
|
||||
<ENTRY> < </ENTRY>
|
||||
<ENTRY>Less than</ENTRY>
|
||||
<ENTRY>'192.168.1.5'::inet < '192.168.1.6'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <= </ENTRY>
|
||||
<ENTRY>Less than or equal</ENTRY>
|
||||
<ENTRY>'192.168.1.5'::inet <= '192.168.1.5'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> = </ENTRY>
|
||||
<ENTRY>Equals</ENTRY>
|
||||
<ENTRY>'192.168.1.5'::inet = '192.168.1.5'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> >= </ENTRY>
|
||||
<ENTRY>Greater or equal</ENTRY>
|
||||
<ENTRY>'192.168.1.5'::inet >= '192.168.1.5'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> > </ENTRY>
|
||||
<ENTRY>Greater</ENTRY>
|
||||
<ENTRY>'192.168.1.5'::inet > '192.168.1.4'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <> </ENTRY>
|
||||
<ENTRY>Not equal</ENTRY>
|
||||
<ENTRY>'192.168.1.5'::inet <> '192.168.1.4'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> << </ENTRY>
|
||||
<ENTRY>is contained within</ENTRY>
|
||||
<ENTRY>'192.168.1.5'::inet << '192.168.1/24'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> <<= </ENTRY>
|
||||
<ENTRY>is contained within or equals</ENTRY>
|
||||
<ENTRY>'192.168.1/24'::inet <<= '192.168.1/24'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> >> </ENTRY>
|
||||
<ENTRY>contains</ENTRY>
|
||||
<ENTRY>'192.168.1/24'::inet >> '192.168.1.5'::inet</ENTRY>
|
||||
</ROW>
|
||||
<ROW>
|
||||
<ENTRY> >>= </ENTRY>
|
||||
<ENTRY>contains or equals</ENTRY>
|
||||
<ENTRY>'192.168.1/24'::inet >>= '192.168.1/24'::inet</ENTRY>
|
||||
</ROW>
|
||||
</TBODY>
|
||||
</TGROUP>
|
||||
</TABLE>
|
||||
|
||||
<para>
|
||||
All of the operators for <type>inet</type> can be applied to
|
||||
<type>cidr</type> values as well. The operators
|
||||
<literal><<</> <literal><<=</>
|
||||
<literal>>></> <literal>>>=</>
|
||||
test for subnet inclusion: they consider only the network parts
|
||||
of the two addresses, ignoring any host part, and determine whether
|
||||
one network part is identical to or a subnet of the other.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="macaddr-operators">
|
||||
<title><type>macaddr</> Operators</>
|
||||
|
||||
<para>
|
||||
The <type>macaddr</> type supports the standard relational
|
||||
operators (<literal>></>, <literal><=</>, etc.) for
|
||||
lexicographical ordering.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
|
||||
</Chapter>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
Local variables:
|
||||
mode:sgml
|
||||
sgml-omittag:nil
|
||||
sgml-shorttag:t
|
||||
sgml-minimize-attributes:nil
|
||||
sgml-always-quote-attributes:t
|
||||
sgml-indent-step:1
|
||||
sgml-indent-data:t
|
||||
sgml-parent-document:nil
|
||||
sgml-default-dtd-file:"./reference.ced"
|
||||
sgml-exposed-tags:nil
|
||||
sgml-local-catalogs:("/usr/lib/sgml/catalog")
|
||||
sgml-local-ecat-files:nil
|
||||
End:
|
||||
-->
|
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.25 2000/09/29 20:21:34 petere Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.26 2000/12/14 22:30:56 petere Exp $
|
||||
-->
|
||||
|
||||
<chapter id="syntax">
|
||||
@ -656,7 +656,7 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
|
||||
<para>
|
||||
Any built-in system, or user-defined operator may be used in SQL.
|
||||
For the list of built-in and system operators consult
|
||||
<xref linkend="operators" endterm="operators-title">.
|
||||
<xref linkend="functions">.
|
||||
For a list of user-defined operators consult your system administrator
|
||||
or run a query on the <literal>pg_operator</literal> class.
|
||||
Parentheses may be used for arbitrary grouping of operators in expressions.
|
||||
@ -669,10 +669,7 @@ CAST ( '<replaceable>string</replaceable>' AS <replaceable>type</replaceable> )
|
||||
<para>
|
||||
<acronym>SQL92</acronym> allows <firstterm>expressions</firstterm>
|
||||
to transform data in tables. Expressions may contain operators
|
||||
(see <xref linkend="operators" endterm="operators-title">
|
||||
for more details) and functions
|
||||
(<xref linkend="functions" endterm="functions-title"> has
|
||||
more information).
|
||||
and functions.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
@ -749,8 +746,8 @@ sqrt(emp.salary)
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title id="aggregates-syntax">Aggregate Expressions</title>
|
||||
<sect2 id="syntax-aggregates">
|
||||
<title>Aggregate Expressions</title>
|
||||
|
||||
<para>
|
||||
An <firstterm>aggregate expression</firstterm> represents the application
|
||||
@ -863,6 +860,177 @@ sqrt(emp.salary)
|
||||
before the classname.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
|
||||
<sect2 id="sql-precedence">
|
||||
<title>Lexical Precedence</title>
|
||||
|
||||
<para>
|
||||
The precedence and associativity of the operators is hard-wired
|
||||
into the parser. Most operators have the same precedence and are
|
||||
left-associative. This may lead to non-intuitive behavior; for
|
||||
example the boolean operators "<" and ">" have a different
|
||||
precedence than the boolean operators "<=" and ">=". Also,
|
||||
you will sometimes need to add parenthesis when using combinations
|
||||
of binary and unary operators. For instance
|
||||
<programlisting>
|
||||
SELECT 5 & ~ 6;
|
||||
</programlisting>
|
||||
will be parsed as
|
||||
<programlisting>
|
||||
SELECT (5 &) ~ 6;
|
||||
</programlisting>
|
||||
because the parser has no idea that <token>&</token> is
|
||||
defined as a binary operator. This is the price one pays for
|
||||
extensibility.
|
||||
</para>
|
||||
|
||||
<table tocentry="1">
|
||||
<title>Operator Ordering (decreasing precedence)</title>
|
||||
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>OperatorElement</entry>
|
||||
<entry>Associativity</entry>
|
||||
<entry>Description</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><token>::</token></entry>
|
||||
<entry>left</entry>
|
||||
<entry><productname>Postgres</productname>-style typecast</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>[</token> <token>]</token></entry>
|
||||
<entry>left</entry>
|
||||
<entry>array element selection</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>.</token></entry>
|
||||
<entry>left</entry>
|
||||
<entry>table/column name separator</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>-</token></entry>
|
||||
<entry>right</entry>
|
||||
<entry>unary minus</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>^</token></entry>
|
||||
<entry>left</entry>
|
||||
<entry>exponentiation</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>*</token> <token>/</token> <token>%</token></entry>
|
||||
<entry>left</entry>
|
||||
<entry>multiplication, division, modulo</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>+</token> <token>-</token></entry>
|
||||
<entry>left</entry>
|
||||
<entry>addition, subtraction</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>IS</token></entry>
|
||||
<entry></entry>
|
||||
<entry>test for TRUE, FALSE, NULL</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>ISNULL</token></entry>
|
||||
<entry></entry>
|
||||
<entry>test for NULL</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>NOTNULL</token></entry>
|
||||
<entry></entry>
|
||||
<entry>test for NOT NULL</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>(any other)</entry>
|
||||
<entry>left</entry>
|
||||
<entry>all other native and user-defined operators</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>IN</token></entry>
|
||||
<entry></entry>
|
||||
<entry>set membership</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>BETWEEN</token></entry>
|
||||
<entry></entry>
|
||||
<entry>containment</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>OVERLAPS</token></entry>
|
||||
<entry></entry>
|
||||
<entry>time interval overlap</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>LIKE</token> <token>ILIKE</token></entry>
|
||||
<entry></entry>
|
||||
<entry>string pattern matching</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token><</token> <token>></token></entry>
|
||||
<entry></entry>
|
||||
<entry>less than, greater than</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>=</token></entry>
|
||||
<entry>right</entry>
|
||||
<entry>equality, assignment</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>NOT</token></entry>
|
||||
<entry>right</entry>
|
||||
<entry>logical negation</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>AND</token></entry>
|
||||
<entry>left</entry>
|
||||
<entry>logical conjunction</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><token>OR</token></entry>
|
||||
<entry>left</entry>
|
||||
<entry>logical disjunction</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>
|
||||
Note that the operator precedence rules also apply to user-defined
|
||||
operators that <quote>look like</quote> the built-in operators
|
||||
with special treatment. For example, if you define a
|
||||
<quote>+</quote> operator for some custom data type it will have
|
||||
the same precedence as the built-in <quote>+</quote> operator, no
|
||||
matter what yours does.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
<!--
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.20 2000/11/24 17:44:22 petere Exp $
|
||||
$Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.21 2000/12/14 22:30:56 petere Exp $
|
||||
-->
|
||||
|
||||
<book id="user">
|
||||
@ -45,11 +45,10 @@ $Header: /cvsroot/pgsql/doc/src/sgml/Attic/user.sgml,v 1.20 2000/11/24 17:44:22
|
||||
&intro;
|
||||
&syntax;
|
||||
&datatype;
|
||||
&oper;
|
||||
&func;
|
||||
&typeconv;
|
||||
&indices;
|
||||
&array;
|
||||
&indices;
|
||||
&inherit;
|
||||
&plsql;
|
||||
&pltcl;
|
||||
|
Loading…
Reference in New Issue
Block a user