diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index a9ba42de140bdc6dcad9390d6345d30e3207e4ed..c0f77a2ab47026e2c7b452958e24fb75b1edca04 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -1,17 +1,10 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 petere Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.47 2001/01/13 18:34:51 petere Exp $ --> <chapter id="datatype"> <title id="datatype-title">Data Types</title> - <abstract> - <para> - Describes the built-in data types available in - <productname>Postgres</productname>. - </para> - </abstract> - <para> <productname>Postgres</productname> has a rich set of native data types available to users. @@ -20,229 +13,229 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe </para> <para> - In the context of data types, the following sections will discuss - <acronym>SQL</acronym> standards compliance, porting issues, and usage. - - Some <productname>Postgres</productname> types correspond directly to - <acronym>SQL92</acronym>-compatible types. In other - cases, data types defined by <acronym>SQL92</acronym> syntax are mapped directly - into native <productname>Postgres</productname> types. - - Many of the built-in types have obvious external formats. However, several - types are either unique to <productname>Postgres</productname>, - such as open and closed paths, or have - several possibilities for formats, such as the date and time types. + <xref linkend="datatype-table"> shows all general-purpose data types + available to users. Most of the alternative names listed in the + <quote>Aliases</quote> column are the names used internally by + <productname>Postgres</productname> for historical reasons. In + addition, some internally used or deprecated types are available, + but they are not documented here. Many of the built-in types have + obvious external formats. However, several types are either unique + to <productname>Postgres</productname>, such as open and closed + paths, or have several possibilities for formats, such as the date + and time types. </para> <para> - <table tocentry="1"> + <table id="datatype-table"> <title><productname>Postgres</productname> Data Types</title> <titleabbrev>Data Types</titleabbrev> <tgroup cols="3"> <thead> <row> - <entry><productname>Postgres</productname> Type</entry> - <entry><acronym>SQL92</acronym> or <acronym>SQL99</acronym> Type</entry> + <entry>Type Name</entry> + <entry>Aliases</entry> <entry>Description</entry> </row> </thead> + <tbody> <row> - <entry>bool</entry> - <entry>boolean</entry> - <entry>logical boolean (true/false)</entry> + <entry><type>bigint</type></entry> + <entry><type>int8</type></entry> + <entry>signed eight-byte integer</entry> </row> + <row> - <entry>box</entry> + <entry><type>bit</type></entry> <entry></entry> - <entry>rectangular box in 2D plane</entry> + <entry>fixed-length bit string</entry> </row> + <row> - <entry>char(n)</entry> - <entry>character(n)</entry> - <entry>fixed-length character string</entry> + <entry><type>bit varying(<replaceable>n</replaceable>)</type></entry> + <entry><type>varbit(<replaceable>n</replaceable>)</type></entry> + <entry>variable-length bit string</entry> </row> + <row> - <entry>cidr</entry> - <entry></entry> - <entry>IP network address</entry> + <entry><type>boolean</type></entry> + <entry><type>bool</type></entry> + <entry>logical boolean (true/false)</entry> </row> + <row> - <entry>circle</entry> + <entry><type>box</type></entry> <entry></entry> - <entry>circle in 2D plane</entry> + <entry>rectangular box in 2D plane</entry> </row> + <row> - <entry>date</entry> - <entry>date</entry> - <entry>calendar date without time of day</entry> + <entry><type>character(<replaceable>n</replaceable>)</type></entry> + <entry><type>char(<replaceable>n</replaceable>)</type></entry> + <entry>fixed-length character string</entry> </row> + <row> - <entry>decimal</entry> - <entry>decimal(p,s)</entry> - <entry>exact numeric with selectable precision</entry> + <entry><type>character varying(<replaceable>n</replaceable>)</type></entry> + <entry><type>varchar(<replaceable>n</replaceable>)</type></entry> + <entry>variable-length character string</entry> </row> + <row> - <entry>float4</entry> - <entry>float(<replaceable>p</replaceable>), <replaceable>p</replaceable> < 7</entry> - <entry>floating-point number with precision <replaceable>p</replaceable></entry> + <entry><type>cidr</type></entry> + <entry></entry> + <entry>IP network address</entry> </row> + <row> - <entry>float8</entry> - <entry>float(<replaceable>p</replaceable>), 7 <= <replaceable>p</replaceable> < 16</entry> - <entry>floating-point number with precision <replaceable>p</replaceable></entry> + <entry><type>circle</type></entry> + <entry></entry> + <entry>circle in 2D plane</entry> </row> + <row> - <entry>inet</entry> + <entry><type>date</type></entry> <entry></entry> - <entry>IP network or host address</entry> + <entry>calendar date (year, month, day)</entry> </row> + <row> - <entry>int2</entry> - <entry>smallint</entry> - <entry>signed two-byte integer</entry> + <entry><type>double precision</type></entry> + <entry><type>float8</type></entry> + <entry>double precision floating-point number</entry> </row> + <row> - <entry>int4</entry> - <entry>int, integer</entry> - <entry>signed 4-byte integer</entry> + <entry><type>inet</type></entry> + <entry></entry> + <entry>IP host address</entry> </row> + <row> - <entry>int8</entry> - <entry></entry> - <entry>signed 8-byte integer</entry> + <entry><type>integer</type></entry> + <entry><type>int</type>, <type>int4</type></entry> + <entry>signed four-byte integer</entry> </row> + <row> - <entry>interval</entry> - <entry>interval</entry> + <entry><type>interval</type></entry> + <entry></entry> <entry>general-use time span</entry> </row> + <row> - <entry>line</entry> + <entry><type>line</type></entry> <entry></entry> <entry>infinite line in 2D plane</entry> </row> + <row> - <entry>lseg</entry> + <entry><type>lseg</type></entry> <entry></entry> <entry>line segment in 2D plane</entry> </row> + <row> - <entry>money</entry> - <entry>decimal(9,2)</entry> - <entry>US-style currency</entry> + <entry><type>macaddr</type></entry> + <entry></entry> + <entry>MAC address</entry> </row> + <row> - <entry>numeric</entry> - <entry>numeric(p,s)</entry> - <entry>exact numeric with selectable precision</entry> + <entry><type>money</type></entry> + <entry></entry> + <entry>US-style currency</entry> </row> + <row> - <entry>path</entry> - <entry></entry> - <entry>open and closed geometric path in 2D plane</entry> + <entry><type>numeric(<replaceable>p</replaceable>, <replaceable>s</replaceable>)</type></entry> + <entry><type>decimal(<replaceable>p</replaceable>, <replaceable>s</replaceable>)</type></entry> + <entry>exact numeric with selectable precision</entry> </row> + <row> - <entry>point</entry> + <entry><type>oid</type></entry> <entry></entry> - <entry>geometric point in 2D plane</entry> + <entry>object identifier</entry> </row> + <row> - <entry>polygon</entry> + <entry><type>path</type></entry> <entry></entry> - <entry>closed geometric path in 2D plane</entry> + <entry>open and closed geometric path in 2D plane</entry> </row> + <row> - <entry>serial</entry> + <entry><type>point</type></entry> <entry></entry> - <entry>unique id for indexing and cross-reference</entry> + <entry>geometric point in 2D plane</entry> </row> + <row> - <entry>text</entry> + <entry><type>polygon</type></entry> <entry></entry> - <entry>variable-length character string</entry> + <entry>closed geometric path in 2D plane</entry> </row> + <row> - <entry>time</entry> - <entry>time [ without time zone ]</entry> - <entry>time of day</entry> + <entry><type>real</type></entry> + <entry><type>float4</type></entry> + <entry>single precision floating-point number</entry> </row> + <row> - <entry>timetz</entry> - <entry>time with time zone</entry> - <entry>time of day, including time zone</entry> + <entry><type>smallint</type></entry> + <entry><type>int2</type></entry> + <entry>signed two-byte integer</entry> </row> + <row> - <entry>timestamp</entry> - <entry>timestamp [ with time zone ]</entry> - <entry>date/time</entry> + <entry><type>serial</type></entry> + <entry></entry> + <entry>autoincrementing four-byte integer</entry> </row> + <row> - <entry>varchar(n)</entry> - <entry>character varying(n)</entry> + <entry><type>text</type></entry> + <entry></entry> <entry>variable-length character string</entry> </row> - </tbody> - </tgroup> - </table> - </para> - - <para> - <note> - <para> - The <type>cidr</type> and <type>inet</type> types are designed to handle any IP type - but only ipv4 is handled in the current implementation. - Everything here that talks about ipv4 will apply to ipv6 in a - future release. - </para> - </note> - </para> - <para> - <table tocentry="1"> - <title><productname>Postgres</productname> Function Constants</title> - <titleabbrev>Constants</titleabbrev> - <tgroup cols="3"> - <thead> <row> - <entry><productname>Postgres</productname> Function</entry> - <entry><acronym>SQL92</acronym> Constant</entry> - <entry>Description</entry> - </row> - </thead> - <tbody> - <row> - <entry>date('now')</entry> - <entry>current_date</entry> - <entry>date of current transaction</entry> + <entry><type>time [ without time zone ]</type></entry> + <entry></entry> + <entry>time of day</entry> </row> + <row> - <entry>time('now')</entry> - <entry>current_time</entry> - <entry>time of current transaction</entry> + <entry><type>time with time zone</type></entry> + <entry></entry> + <entry>time of day, including time zone</entry> </row> + <row> - <entry>timestamp('now')</entry> - <entry>current_timestamp</entry> - <entry>date and time of current transaction</entry> + <entry><type>timestamp [ with time zone ]</type></entry> + <entry></entry> + <entry>date and time</entry> </row> </tbody> </tgroup> </table> </para> - <para> - <productname>Postgres</productname> has features at the forefront of - <acronym>ORDBMS</acronym> development. In addition to - <acronym>SQL99</acronym> conformance, substantial portions - of <acronym>SQL92</acronym> are also supported. - Although we strive for <acronym>SQL92</acronym> compliance, - there are some aspects of the standard - that are ill considered and which should not live through subsequent standards. - <productname>Postgres</productname> will not make great efforts to - conform to these features; however, these tend to apply in little-used - or obsure cases, and a typical user is not likely to run into them. - </para> + <note> + <title>Compatibility</title> + <para> + The following types (or spellings thereof) are specified by SQL: + <type>bit</type>, <type>bit varying</type>, <type>boolean</type>, + <type>char</type>, <type>character</type>, <type>character + varying</type>, <type>varchar</type>, <type>date</type>, + <type>double precision</type>, <type>integer</type>, + <type>interval</type>, <type>numeric</type>, <type>decimal</type>, + <type>real</type>, <type>smallint</type>, <type>time</type>, + <type>timestamp</type> (both with or without time zone). + </para> + </note> <para> Most of the input and output functions corresponding to the @@ -259,19 +252,9 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe Some of the input and output functions are not invertible. That is, the result of an output function may lose precision when compared to the original input. - - <note> - <para> - Floating point numbers are allowed to retain - most of the intrinsic precision of the type (typically 15 digits for doubles, - 6 digits for 4-byte floats). - Other types with underlying floating point fields (e.g. geometric - types) carry similar precision. - </para> - </note> </para> - <sect1 id="numeric-types"> + <sect1 id="datatype-numeric"> <title>Numeric Types</title> <para> @@ -293,42 +276,32 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe <entry>Range</entry> </row> </thead> + <tbody> <row> - <entry>decimal</entry> - <entry>variable</entry> - <entry>User-specified precision</entry> - <entry>no limit</entry> - </row> - <row> - <entry>float4</entry> - <entry>4 bytes</entry> - <entry>Variable-precision</entry> - <entry>6 decimal places</entry> - </row> - <row> - <entry>float8</entry> - <entry>8 bytes</entry> - <entry>Variable-precision</entry> - <entry>15 decimal places</entry> - </row> - <row> - <entry>int2</entry> + <entry>smallint</entry> <entry>2 bytes</entry> <entry>Fixed-precision</entry> <entry>-32768 to +32767</entry> </row> <row> - <entry>int4</entry> + <entry>integer</entry> <entry>4 bytes</entry> <entry>Usual choice for fixed-precision</entry> <entry>-2147483648 to +2147483647</entry> </row> <row> - <entry>int8</entry> + <entry>bigint</entry> <entry>8 bytes</entry> <entry>Very large range fixed-precision</entry> - <entry>~18 decimal places</entry> + <entry>about 18 decimal places</entry> + </row> + + <row> + <entry>decimal</entry> + <entry>variable</entry> + <entry>User-specified precision</entry> + <entry>no limit</entry> </row> <row> <entry>numeric</entry> @@ -336,6 +309,20 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe <entry>User-specified precision</entry> <entry>no limit</entry> </row> + + <row> + <entry>real</entry> + <entry>4 bytes</entry> + <entry>Variable-precision</entry> + <entry>6 decimal places</entry> + </row> + <row> + <entry>double precision</entry> + <entry>8 bytes</entry> + <entry>Variable-precision</entry> + <entry>15 decimal places</entry> + </row> + <row> <entry>serial</entry> <entry>4 bytes</entry> @@ -353,11 +340,11 @@ $Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.46 2000/12/22 18:57:49 pe </para> <para> - The <type>int8</type> type may not be available on all platforms since + The <type>bigint</type> type may not be available on all platforms since it relies on compiler support for eight-byte integers. </para> - <sect2> + <sect2 id="datatype-serial"> <title>The Serial Type</title> <para> @@ -403,7 +390,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </sect2> </sect1> - <sect1 id="monetary-types"> + <sect1 id="datatype-money"> <title>Monetary Type</title> <note> @@ -455,15 +442,15 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </sect1> - <sect1 id="character-types"> + <sect1 id="datatype-character"> <title>Character Types</title> <para> - <acronym>SQL92</acronym> defines two primary character types: - <type>char</type> and <type>varchar</type>. + <acronym>SQL</acronym> defines two primary character types: + <type>character</type> and <type>character varying</type>. <productname>Postgres</productname> supports these types, in addition to the more general <type>text</type> type, - which unlike <type>varchar</type> + which unlike <type>character varying</type> does not require an explicit declared upper limit on the size of the field. </para> @@ -483,16 +470,16 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </thead> <tbody> <row> - <entry>"char"</entry> - <entry>1 byte</entry> - <entry><acronym>SQL92</acronym>-compatible</entry> - <entry>Single character</entry> + <entry>character(n), char(n)</entry> + <entry>(4+n) bytes</entry> + <entry><acronym>SQL</acronym>-compatible</entry> + <entry>Fixed-length blank padded</entry> </row> <row> - <entry>char(n)</entry> + <entry>character varying(n), varchar(n)</entry> <entry>(4+n) bytes</entry> - <entry><acronym>SQL92</acronym>-compatible</entry> - <entry>Fixed-length blank padded</entry> + <entry><acronym>SQL</acronym>-compatible</entry> + <entry>Variable-length with limit</entry> </row> <row> <entry>text</entry> @@ -500,26 +487,32 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <entry>Most flexible</entry> <entry>Variable unlimited length</entry> </row> - <row> - <entry>varchar(n)</entry> - <entry>(4+n) bytes</entry> - <entry><acronym>SQL92</acronym>-compatible</entry> - <entry>Variable-length with limit</entry> - </row> </tbody> </tgroup> </table> + + <note> + <para> + Although the type <type>text</type> is not SQL-compliant, many + other RDBMS packages have it as well. + </para> + </note> </para> <para> - There is one other fixed-length character type in <productname>Postgres</productname>. - The <type>name</type> type exists <emphasis>only</emphasis> for - storage of internal catalog names and - is not intended for use by the general user. - Its length is currently defined as 32 bytes (31 characters plus terminator) - but should be reference using NAMEDATALEN. - The length is set at compile time (and is therefore adjustable for - special uses); the default maximum length may change in a future release. + There are two other fixed-length character types in + <productname>Postgres</productname>. The <type>name</type> type + exists <emphasis>only</emphasis> for storage of internal catalog + names and is not intended for use by the general user. Its length + is currently defined as 32 bytes (31 characters plus terminator) + but should be referenced using the macro + <symbol>NAMEDATALEN</symbol>. The length is set at compile time + (and is therefore adjustable for special uses); the default + maximum length may change in a future release. The type + <type>"char"</type> (note the quotes) is different from + <type>char(1)</type> in that it only uses one byte of storage. It + is internally used in the system catalogs as a poor-man's + enumeration type. </para> <para> @@ -535,6 +528,11 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </row> </thead> <tbody> + <row> + <entry>"char"</entry> + <entry>1 byte</entry> + <entry>Single character internal type</entry> + </row> <row> <entry>name</entry> <entry>32 bytes</entry> @@ -547,7 +545,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </sect1> - <sect1 id="datetime-types"> + <sect1 id="datatype-datetime"> <title>Date/Time Types</title> <para> @@ -641,7 +639,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </para> - <sect2> + <sect2 id="datatype-datetime-input"> <title>Date/Time Input</title> <para> @@ -658,7 +656,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </para> <para> - See <xref endterm="datetime-appendix-title" linkend="datetime-appendix-title"> + See <xref linkend="datetime-appendix"> for the exact parsing rules of date/time input and for the recognized time zones. </para> @@ -956,7 +954,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </para> <para> - Refer to <xref endterm="timezone-title" linkend="timezone"> for + Refer to <xref linkend="datatype-timezone-table"> for more examples of time zones. </para> </sect3> @@ -984,8 +982,8 @@ January 8 04:05:06 1999 PST </para> <para> - <table tocentry="1" id="timezone"> - <title id="timezone-title"><productname>Postgres</productname> Time Zone Input</title> + <table tocentry="1" id="datatype-timezone-table"> + <title><productname>Postgres</productname> Time Zone Input</title> <titleabbrev>Time Zone Inputs</titleabbrev> <tgroup cols="2"> <thead> @@ -1112,7 +1110,7 @@ January 8 04:05:06 1999 PST </sect2> - <sect2> + <sect2 id="datatype-datetime-output"> <title>Date/Time Output</title> <para> @@ -1231,7 +1229,7 @@ January 8 04:05:06 1999 PST </sect2> - <sect2> + <sect2 id="datatype-timezones"> <title>Time Zones</title> <para> @@ -1351,7 +1349,7 @@ January 8 04:05:06 1999 PST </sect2> - <sect2> + <sect2 id="datatype-datetime-internals"> <title>Internals</title> <para> @@ -1370,22 +1368,21 @@ January 8 04:05:06 1999 PST </sect1> - <sect1 id="boolean-type"> + <sect1 id="datatype-boolean"> <title>Boolean Type</title> <para> - <productname>Postgres</productname> supports <type>bool</type> as - the <acronym>SQL99</acronym> boolean type. - <type>bool</type> can have one of only two states: 'true' or 'false'. - A third state, 'unknown', is not - implemented and is not suggested in <acronym>SQL99</acronym>; - <acronym>NULL</acronym> is an - effective substitute. <type>bool</type> can be used in any boolean expression, - and boolean expressions - always evaluate to a result compatible with this type.</para> + <productname>Postgres</productname> supports the + <acronym>SQL99</acronym> <type>boolean</type> type. + <type>boolean</type> can have one of only two states: 'true' or + 'false'. A third state, 'unknown', is represented by the SQL NULL + state. <type>boolean</type> can be used in any boolean expression, + and boolean expressions always evaluate to a result compatible + with this type. + </para> <para> - <type>bool</type> uses 1 byte of storage. + <type>boolean</type> uses 1 byte of storage. </para> <para> @@ -1417,7 +1414,7 @@ January 8 04:05:06 1999 PST </para> </sect1> - <sect1 id="geometric-types"> + <sect1 id="datatype-geometric"> <title>Geometric Types</title> <para> @@ -1746,7 +1743,7 @@ January 8 04:05:06 1999 PST </sect1> - <sect1 id="net-types"> + <sect1 id="datatype-net-types"> <title>Network Address Data Types</title> <para> @@ -1755,7 +1752,7 @@ January 8 04:05:06 1999 PST types, because these types offer input error checking and several specialized operators and functions. - <table tocentry="1" id="net-types-table"> + <table tocentry="1" id="datatype-net-types-table"> <title>Network Address Data Types</title> <tgroup cols="4"> <thead> @@ -1799,7 +1796,7 @@ January 8 04:05:06 1999 PST </para> - <sect2 id="inet-type"> + <sect2 id="datatype-inet"> <title><type>inet</type></title> <para> @@ -1825,7 +1822,7 @@ January 8 04:05:06 1999 PST </para> </sect2> - <sect2 id="cidr-type"> + <sect2 id="datatype-cidr"> <title><type>cidr</></title> <para> @@ -1918,7 +1915,7 @@ January 8 04:05:06 1999 PST </para> </sect2> - <sect2 id="inet-vs-cidr"> + <sect2 id="datatype-inet-vs-cidr"> <title><type>inet</type> vs <type>cidr</type></title> <para> @@ -1936,7 +1933,7 @@ January 8 04:05:06 1999 PST </para> </sect2> - <sect2 id="macaddr-type"> + <sect2 id="datatype-macaddr"> <title><type>macaddr</></> <para> @@ -1955,6 +1952,40 @@ January 8 04:05:06 1999 PST </sect1> + <sect1 id="datatype-bit"> + <title>Bit String Types</title> + + <para> + Bit strings are strings of 1's and 0's. They can be used to store + or visualize bit masks. There are two SQL bit types: + <type>BIT(<replaceable>x</replaceable>)</type> and <type>BIT + VARYING(<replaceable>x</replaceable>)</type>; the + <replaceable>x</replaceable> specifies the maximum length. + <type>BIT</type> type data is automatically padded with 0's on the + right to the maximum length, <type>BIT VARYING</type> is of + variable length. <type>BIT</type> without length is requivalent + to <literal>BIT(1)</literal>, <type>BIT VARYING</type> means + unlimited length. Input data that is longer than the allowed + length will be truncated. Refer to <xref + linkend="sql-syntax-bit-strings"> for information about the syntax + of bit string constants. Bit-logical operators and string + manipulation functions are available; see <xref + linkend="functions">. + </para> + + <informalexample> + <para> + Some examples: +<programlisting> +CREATE TABLE test (a BIT(3), b BIT VARYING(5)); +INSERT INTO test VALUES (B'101', B'00'); +SELECT SUBSTRING(b FROM 1 FOR 2) FROM test; +</programlisting> + </para> + </informalexample> + + </sect1> + </chapter> <!-- Keep this comment at the end of the file diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 533c1f2757df63c299ba7ce01755f495a69c25b2..2c6237ab2906910dd7a4420542a4427c9455803b 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,4 +1,4 @@ -<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.46 2000/12/22 18:00:24 tgl Exp $ --> +<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.47 2001/01/13 18:34:51 petere Exp $ --> <chapter id="functions"> <title>Functions and Operators</title> @@ -184,42 +184,102 @@ <entry>@ -5.0</entry> <entry>5.0</entry> </row> + + <row> + <entry> <literal>&</literal> </entry> + <entry>Binary AND</entry> + <entry>91 & 15</entry> + <entry>11</entry> + </row> + + <row> + <entry> <literal>|</literal> </entry> + <entry>Binary OR</entry> + <entry>32 | 3</entry> + <entry>35</entry> + </row> + + <row> + <entry> <literal>#</literal> </entry> + <entry>Binary XOR</entry> + <entry>17 # 5</entry> + <entry>20</entry> + </row> + + <row> + <entry> <literal>~</literal> </entry> + <entry>Binary NOT</entry> + <entry>~1</entry> + <entry>-2</entry> + </row> + + <row> + <entry> << </entry> + <entry>Binary shift left</entry> + <entry>1 << 4</entry> + <entry>16</entry> + </row> + + <row> + <entry> >> </entry> + <entry>Binary shift right</entry> + <entry>8 >> 2</entry> + <entry>2</entry> + </row> + </tbody> </tgroup> </table> -<!-- - <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> ---> + <para> + The <quote>binary</quote> operators are also available for the bit + string types <type>BIT</type> and <type>BIT VARYING</type>. + + <table> + <title>Bit String Binary Operators</title> + + <tgroup cols="2"> + <thead> + <row> + <entry>Example</entry> + <entry>Result</entry> + </row> + </thead> + + <tbody> + <row> + <entry>B'10001' & B'01101'</entry> + <entry>00001</entry> + </row> + <row> + <entry>B'10001' | B'01101'</entry> + <entry>11101</entry> + </row> + <row> + <entry>B'10001' # B'01101'</entry> + <entry>11110</entry> + </row> + <row> + <entry>~ B'10001'</entry> + <entry>01110</entry> + </row> + <row> + <entry>B'10001' << 3</entry> + <entry>01000</entry> + </row> + <row> + <entry>B'10001' >> 2</entry> + <entry>00100</entry> + </row> + </tbody> + </tgroup> + </table> + + Bit string arguments to <literal>&</literal>, <literal>|</literal>, + and <literal>#</literal> must be of equal length. When bit + shifting, the original length of the string is preserved, as shown + here. + </para> <table tocentry="1"> <title>Mathematical Functions</title> @@ -484,7 +544,8 @@ wary of potential effects of the automatic padding when using the <type>CHARACTER</type> type. Generally the functions described here also work on data of non-string types by converting that data - to a string representation first. + to a string representation first. Some functions also exist + natively for bit string types. </para> <para> diff --git a/doc/src/sgml/syntax.sgml b/doc/src/sgml/syntax.sgml index d8cd5f18a28f322e4d63a4216de88d002c6fc753..45b893e1c5574be1fb0200fc2cb1da6b57124eaf 100644 --- a/doc/src/sgml/syntax.sgml +++ b/doc/src/sgml/syntax.sgml @@ -1,5 +1,5 @@ <!-- -$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.33 2001/01/08 22:07:47 tgl Exp $ +$Header: /cvsroot/pgsql/doc/src/sgml/syntax.sgml,v 1.34 2001/01/13 18:34:51 petere Exp $ --> <chapter id="sql-syntax"> @@ -232,7 +232,7 @@ SELECT 'foo' 'bar'; </para> </sect3> - <sect3> + <sect3 id="sql-syntax-bit-strings"> <title>Bit String Constants</title> <para>