<!-- $Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/func.sgml,v 1.29 2001/09/13 02:12:58 k-kondo Exp $ -->

<chapter id="functions">
 <!--<title>Functions and Operators</title>-->
 <title>関数と演算子</title>
<indexterm><primary sortas="かんすう">関数</primary></indexterm>
<indexterm><primary sortas="えんざんし">演算子</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="かんすう">関数</secondary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="えんざんし">演算子</secondary></indexterm>

 <para>
  <!--<productname>Postgres</productname> provides a large number of
  functions and operators for the built-in data types.  Users can also
  define their own functions and operators, as described in the
  <citetitle>Programmer's Guide</citetitle>.  The
  <application>psql</application> commands <command>&bsol;df</command> and
  <command>&bsol;do</command> can be used to show the list of all actually
  available functions and operators, respectively.-->

  <productname>Postgres</productname>には既存のデータ型のために多くの関数や演算子が用意されています。さらに、<citetitle>&programmer-guide;</citetitle>にも述べてあるように、ユーザーが新たに関数や演算子を定義することも可能です。<application>psql</application>の<command>&bsol;df</command>コマンドと<command>&bsol;do</command>コマンドを使って、実際に存在する関数や演算子のリストをそれぞれ表示させることができます。
 </para>

 <para>
  <!--If you are concerned about portability then take note that most of
  the functions and operators described in this chapter, with the
  exception of the most trivial arithmetic and comparison operators
  and some explicitly marked functions, are not specified by the <acronym>SQL</acronym>
  standard.  However, many other <acronym>RDBMS</acronym> packages provide a lot of the
  same or similar functions, and some of the ones provided in
  <productname>Postgres</productname> have in fact been inspired by
  other implementations.-->

  移植性について気になる場合、基本的な算術演算子や比較演算子、明示的に印を付けた関数を除いて、この章で説明している関数や演算子のほとんどは標準<acronym>SQL</acronym>では規定されていない点に注意してください。しかし、多くの<acronym>RDBMS</acronym>パッケージは、多くの類似した関数を提供していて、<productname>Postgres</productname>で提供されているものの中にも他のものから影響を受けたものもあります。
 </para>


 <sect1 id="functions-logical">
  <!--<title>Logical Operators</title>-->
  <title>論理演算子</title>
<indexterm><primary sortas="ろんりえんざんし">論理演算子</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="ろんりえんざんし">論理演算子</secondary></indexterm>
  <para>
   <!--The usual logical operators are available:-->
   一般的に使用される理論演算子が使用できます。</para>

   <simplelist>
    <member>AND</member><indexterm><primary>AND</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>AND</secondary></indexterm>
    <member>OR</member><indexterm><primary>OR</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>OR</secondary></indexterm>
    <member>NOT</member><indexterm><primary>NOT</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>NOT</secondary></indexterm>
   </simplelist>

   <!--<acronym>SQL</acronym> uses a three-valued Boolean logic where NULL represents
   <quote>unknown</quote>.  Observe the following truth tables:-->

<para><acronym>SQL</acronym>は「3値ブーリアン論理」を使用しており、NULLは<quote>unknown</quote>を示します。以下の表を参照してください。</para>

   <informaltable>
<!--<title>3値ブーリアン論理</title>-->
    <tgroup cols="4">
     <thead>
      <row>
       <entry><replaceable>a</replaceable></entry>
       <entry><replaceable>b</replaceable></entry>
       <entry><replaceable>a</replaceable> AND <replaceable>b</replaceable></entry>
       <entry><replaceable>a</replaceable> OR <replaceable>b</replaceable></entry>
      </row>
     </thead>

     <tbody>
      <row>
       <entry>TRUE（真）</entry>
       <entry>TRUE（真）</entry>
       <entry>TRUE（真）</entry>
       <entry>TRUE（真）</entry>
      </row>

      <row>
       <entry>TRUE（真）</entry>
       <entry>FALSE（偽）</entry>
       <entry>FALSE（偽）</entry>
       <entry>TRUE（真）</entry>
      </row>

      <row>
       <entry>TRUE（真）</entry>
       <entry>NULL</entry>
       <entry>NULL</entry>
       <entry>TRUE（真）</entry>
      </row>

      <row>
       <entry>FALSE（偽）</entry>
       <entry>FALSE（偽）</entry>
       <entry>FALSE（偽）</entry>
       <entry>FALSE（偽）</entry>
      </row>

      <row>
       <entry>FALSE（偽）</entry>
       <entry>NULL</entry>
       <entry>FALSE（偽）</entry>
       <entry>NULL</entry>
      </row>

      <row>
       <entry>NULL</entry>
       <entry>NULL</entry>
       <entry>NULL</entry>
       <entry>NULL</entry>
      </row>
     </tbody>
    </tgroup>
   </informaltable>

   <informaltable>
<!--<title>ブーリアンとNOT</title>-->
    <tgroup cols="2">
     <thead>
      <row>
       <entry><replaceable>a</replaceable></entry>
       <entry>NOT <replaceable>a</replaceable></entry>
      </row>
     </thead>

     <tbody>
      <row>
       <entry>TRUE（真）</entry>
       <entry>FALSE（偽）</entry>
      </row>

      <row>
       <entry>FALSE（偽）</entry>
       <entry>TRUE（真）</entry>
      </row>

      <row>
       <entry>NULL</entry>
       <entry>NULL</entry>
      </row>
     </tbody>
    </tgroup>
   </informaltable>
 </sect1>

 <sect1 id="functions-comparison">
  <!--<title>Comparison Operators</title>-->
  <title>比較演算子</title>
<indexterm><primary sortas="ひかくえんざんし">比較演算子</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="ひかくえんざんし">比較演算子</secondary></indexterm>
  <table>
   <!--<title>Comparison Operators</TITLE>-->
   <title>比較演算子</title>
   <tgroup cols="2">
    <thead>
     <row>
      <entry><!--Operator-->演算子</entry>
      <entry><!--Description-->説明</entry>
     </row>
    </thead>

    <tbody>
     <row>
      <entry><literal>&lt;</literal><indexterm><primary>&lt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;</secondary></indexterm></entry>
      <entry><!--less than-->小なり</entry>
     </row>

     <row>
      <entry><literal>&gt;</literal> <indexterm><primary>&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;</secondary></indexterm></entry>
      <entry><!--greater than-->大なり</entry>
     </row>

     <row>
      <entry><literal>&lt;=</literal> <indexterm><primary>&lt;=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;=</secondary></indexterm></entry>
      <entry><!--less than or equal to-->小なりまたは等しい</entry>
     </row>

     <row>
      <entry><literal>&gt;=</literal> <indexterm><primary>&gt;=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;=</secondary></indexterm></entry>
      <entry><!--greater than or equal to-->大なりまたは等しい</entry>
     </row>

     <row>
      <entry><literal>=</literal> <indexterm><primary>=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>=</secondary></indexterm></entry>
      <entry><!--equal-->等しい</entry>
     </row>

     <row>
      <entry><literal>&lt;&gt;</literal>、<literal>!=</literal> <indexterm><primary>&lt;&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;&gt;</secondary></indexterm><indexterm><primary>!=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>!=</secondary></indexterm></entry>
      <entry><!--not equal-->等しくない</entry>
     </row>
    </tbody>
   </tgroup>
  </table>

  <note>
   <para>
    <!--The <literal>!=</literal> operator is converted to
    <literal>&lt;&gt;</literal> in the parser stage.  It is not
    possible to implement <literal>!=</literal> and
    <literal>&lt;&gt;</literal> operators that do different things.-->

    <literal>!=</literal>演算子は構文解析で<literal>&lt;&gt;</literal>に変換されます。したがって、<literal>!=</literal>と<literal>&lt;&gt;</literal>で異なることは行えません。

   </para>
  </note>

  <para>
   <!--Comparison operators are available for all data types where this
   makes sense.  All comparison operators are binary operators that
   return values of type <type>boolean</type>; expressions like
   <literal>1 &lt; 2 &lt; 3</literal> are not valid (because there is
   no <literal>&lt;</literal> operator to compare a Boolean value with
   <literal>3</literal>).-->

   比較演算子は、その意味が通るならばすべてのデータ型で使用できます。すべての比較演算子は二項演算子で、<type>boolean</type>型を返します。<literal>1 &lt; 2 &lt; 3</literal>のような表現の場合、1番目の<literal>&lt;</literal>演算子はブーリアン値を返しますが、2番目の<literal>&lt;</literal>演算子はブーリアン値と<literal>3</literal>を比較できないので、式は無効となります。

  </para>

  <para>
   <!--In addition to the comparison operators, the special
   <token>BETWEEN</token> construct is available.-->

   比較演算子に加えて、<token>BETWEEN</token>も使用できます。</para>


<synopsis>
<replaceable>a</replaceable> BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable>
</synopsis>

<para>
   <!--is equivalent to-->上記の表現は、下記のものと同義です。
</para>

<synopsis>
<replaceable>a</replaceable> &gt;= <replaceable>x</replaceable> AND <replaceable>a</replaceable> &lt;= <replaceable>y</replaceable>
</synopsis>

<para>
   <!--Similarly,-->同様に、以下の2つの表現は同義です。
</para>

<synopsis>
<replaceable>a</replaceable> NOT BETWEEN <replaceable>x</replaceable> AND <replaceable>y</replaceable>
</synopsis>
   <!--is equivalent to-->
<synopsis>
<replaceable>a</replaceable> &lt; <replaceable>x</replaceable> OR <replaceable>a</replaceable> &gt; <replaceable>y</replaceable>
</synopsis>

   <!--There is no difference between the two respective forms apart from
   the <acronym>CPU</acronym> cycles required to rewrite the first one
   into the second one internally.-->

<para>
   内部的に1番目の形式を2番目の形式に書き換えるのに必要な<acronym>CPU</acronym>サイクル以外は、2つのそれぞれの形式には違いがありません。

  </para>

  <para>
   <!--To check whether a value is or is not NULL, use the constructs-->
   値がNULLかどうかを識別するには、以下の構文を使用します。</para>


<synopsis>
<replaceable>expression</replaceable> IS NULL
<replaceable>expression</replaceable> IS NOT NULL
</synopsis>


<para>
   <!--Do <emphasis>not</emphasis> use
   <literal><replaceable>expression</replaceable> = NULL</literal>
   because NULL is not <quote>equal to</quote> NULL.  (NULL represents
   an unknown value, so it is not known whether two unknown values are
   equal.)  <productname>Postgres</productname> presently converts
   <literal>x = NULL</literal> clauses to <literal>x IS NULL</literal> to
   allow some broken client applications (such as
   <productname>Microsoft Access</productname>) to work, but this may
   be discontinued in a future release.-->

   NULLはNULLと<quote>等しく</quote>ないので、「<literal><replaceable>式</replaceable> = NULL</literal>」とは<emphasis>しないで</emphasis>ください（NULLは「不明な値」なので不明な値同士が等しいかの識別はできません）。<productname>Postgres</productname>は現在、<productname>Microsoft Access</productname>などのブロークンクライアントアプリケーションなどと整合性を保つために、「<literal>x = NULL</literal>」式を「<literal>x IS NULL</literal>」に変換します。しかし、この機能は将来のリリースではなくなる可能性があります。
  </para>
 </sect1>


 <sect1 id="functions-math">
  <!--<title>Mathematical Functions and Operators</title>-->
  <title>算術関数と演算子</title>
<indexterm><primary sortas="さんじゅつえんざんし">算術演算子</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="さんじゅつえんざんし">算術演算子</secondary></indexterm>
  <table>
   <!--<title>Mathematical Operators</TITLE>-->
   <title>算術演算子</TITLE>

   <tgroup cols="4">
    <thead>
     <row>
      <entry><!--Name-->名前</entry>
      <entry><!--Description-->説明</entry>
      <entry><!--Example-->例</entry>
      <entry><!--Result-->結果</entry>
     </row>
    </thead>

    <tbody>
     <row>
      <entry><literal>+</literal> <indexterm><primary>+</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>+</secondary></indexterm></entry>
      <entry><!--Addition-->和</entry>
      <entry>2 + 3</entry>
      <entry>5</entry>
     </row>

     <row>
      <entry><literal>-</literal> <indexterm><primary>-</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>-</secondary></indexterm></entry>
      <entry><!--Subtraction-->差</entry>
      <entry>2 - 3</entry>
      <entry>-1</entry>
     </row>

     <row>
      <entry><literal>*</literal> <indexterm><primary>*</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>*</secondary></indexterm></entry>
      <entry><!--Multiplication-->積</entry>
      <entry>2 * 3</entry>
      <entry>6</entry>
     </row>

     <row>
      <entry><literal>/</literal> <indexterm><primary>/</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>/</secondary></indexterm></entry>
      <entry><!--Division (integer division truncates results)-->
             商（整数では切り捨てされます）
      </entry>
      <entry>4 / 2</entry>
      <entry>2</entry>
     </row>

     <row>
      <entry><literal>%</literal> <indexterm><primary>%</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>%</secondary></indexterm></entry>
      <entry><!--Modulo (remainder)-->剰余（余り）</entry>
      <entry>5 % 4</entry>
      <entry>1</entry>
     </row>

     <row>
      <entry><literal>^</literal> <indexterm><primary>^</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>^</secondary></indexterm></entry>
      <entry><!--Exponentiation-->冪乗</entry>
      <entry>2.0 ^ 3.0</entry>
      <entry>8</entry>
     </row>

     <row>
      <entry><literal>|/</literal> <indexterm><primary>|/</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>|/</secondary></indexterm></entry>
      <entry><!--Square root-->平方根</entry>
      <entry>|/ 25.0</entry>
      <entry>5</entry>
     </row>

     <row>
      <entry><literal>||/</literal> <indexterm><primary>||/</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>||/</secondary></indexterm></entry>
      <entry><!--Cube root-->3乗根</entry>
      <entry>||/ 27.0</entry>
      <entry>3</entry>
     </row>

     <row>
      <entry><literal>!</literal> <indexterm><primary>!</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>!</secondary></indexterm></entry>
      <entry><!--Factorial-->階乗</entry>
      <entry>5 !</entry>
      <entry>120</entry>
     </row>

     <row>
      <entry><literal>!!</literal> <indexterm><primary>!!</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>!!</secondary></indexterm></entry>
      <entry><!--Factorial (prefix operator)-->階乗（前置演算子）</entry>
      <entry>!! 5</entry>
      <entry>120</entry>
     </row>

     <row>
      <entry><literal>@</literal> <indexterm><primary>@</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>@</secondary></indexterm></entry>
      <entry><!--Absolute value-->絶対値</entry>
      <entry>@ -5.0</entry>
      <entry>5</entry>
     </row>

     <row>
      <entry><literal>&amp;</literal> <indexterm><primary>&amp;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&amp;</secondary></indexterm></entry>
      <entry><!--Binary AND-->バイナリのAND</entry>
      <entry>91 &amp; 15</entry>
      <entry>11</entry>
     </row>

     <row>
      <entry><literal>|</literal> <indexterm><primary>|</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>|</secondary></indexterm></entry>
      <entry><!--Binary OR-->バイナリのOR</entry>
      <entry>32 | 3</entry>
      <entry>35</entry>
     </row>

     <row>
      <entry><literal>#</literal> <indexterm><primary>#</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>#</secondary></indexterm></entry>
      <entry<!-->Binary XOR-->バイナリのXOR</entry>
      <entry>17 # 5</entry>
      <entry>20</entry>
     </row>

     <row>
      <entry><literal>~</literal> <indexterm><primary>~</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>~</secondary></indexterm></entry>
      <entry><!--Binary NOT-->バイナリのNOT</entry>
      <entry>~1</entry>
      <entry>-2</entry>
     </row>

     <row>
      <entry>&lt;&lt; <indexterm><primary>&lt;&lt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;&lt;</secondary></indexterm></entry>
      <entry><!--Binary shift left-->論理左シフト</entry>
      <entry>1 &lt;&lt; 4</entry>
      <entry>16</entry>
     </row>

     <row>
      <entry>&gt;&gt; <indexterm><primary>&gt;&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;&gt;</secondary></indexterm></entry>
      <entry><!--Binary shift right-->論理右シフト</entry>
      <entry>8 &gt;&gt; 2</entry>
      <entry>2</entry>
     </row>

    </tbody>
   </tgroup>
  </table>

  <para>
   <!--The <quote>binary</quote> operators are also available for the bit
   string types <type>BIT</type> and <type>BIT VARYING</type>.-->

   <quote>バイナリ</quote>演算子は、<type>BIT</type>型や<type>BIT VARYING</type>型などのビット列型でも使用できます。</para>

   <table>
    <!--<title>Bit String Binary Operators</title>-->
    <title>ビット列のビット演算子</title>
<indexterm><primary sortas="びっとえんざんし">ビット演算子</primary></indexterm><indexterm><primary>SQL</primary><secondary sortas="びっとえんざんし">ビット演算子</secondary></indexterm>
    <tgroup cols="2">
     <thead>
      <row>
       <entry><!--Example-->例</entry>
       <entry><!--Result-->結果</entry>
      </row>
     </thead>

     <tbody>
      <row>
       <entry>B'10001' &amp; 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>ビット列演算において、<literal>&amp;</literal>、<literal>|</literal>、<literal>#</literal>の引数の大きさは等しくなければいけません。ビットシフトを行う際、列のオリジナルの長さは記憶されます。
  </para>

  <table tocentry="1">
   <!--<title>Mathematical Functions</title>-->
   <title>算術関数</title><indexterm><primary sortas="さんじゅつかんすう">算術関数</primary></indexterm><indexterm><primary>SQL</primary><secondary sortas="さんじゅつかんすう">算術関数</secondary></indexterm>
   <tgroup cols="5">
    <thead>
     <row>
      <entry><!--Function-->関数</entry>
      <entry><!--Return Type-->戻り値</entry>
      <entry><!--Description-->説明</entry>
      <entry><!--Example-->例</entry>
      <entry><!--Result-->結果</entry>
     </row>
    </thead>

    <tbody>
     <row>
      <entry>abs(<replaceable>x</replaceable>)<indexterm><primary>abs()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>abs()</secondary></indexterm></entry>
      <entry><!--(same as argument type)-->（引数と同じ型）</entry>
      <entry><!--absolute value-->絶対値</entry>
      <entry>abs(-17.4)</entry>
      <entry>17.4</entry>
     </row>

     <row>
      <entry>cbrt(<type>double precision</type>)<indexterm><primary>cbrt()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>cbrt()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--cube root-->3乗根</entry>
      <entry>cbrt(27.0)</entry>
      <entry>3</entry>
     </row>

     <row>
      <entry>ceil(<type>numeric</type>)<indexterm><primary>ceil()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>ceil()</secondary></indexterm></entry>
      <entry><type>numeric</type></entry>
      <entry><!--smallest integer not less than argument-->引数よりも小さくない最小の整数</entry>
      <entry>ceil(-42.8)</entry>
      <entry>-42</entry>
     </row>

     <row>
      <entry>degrees(<type>double precision</type>)<indexterm><primary>degrees()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>degrees()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--convert radians to degrees-->ラジアンを度に変換</entry>
      <entry>degrees(0.5)</entry>
      <entry>28.6478897565412</entry>
     </row>

     <row>
      <entry>exp(<type>double precision</type>)<indexterm><primary>exp()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>exp()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--exponential function-->指数関数</entry>
      <entry>exp(1.0)</entry>
      <entry>2.71828182845905</entry>
     </row>

     <row>
      <entry>floor(<type>numeric</type>)<indexterm><primary>floor()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>floor()</secondary></indexterm></entry>
      <entry><type>numeric</type></entry>
      <entry><!--largest integer not greater than argument-->引数よりも大きくない最大の整数
      </entry>
      <entry>floor(-42.8)</entry>
      <entry>-43</entry>
     </row>

     <row>
      <entry>ln(<type>double precision</type>)<indexterm><primary>ln()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>ln()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--natural logarithm-->自然対数</entry>
      <entry>ln(2.0)</entry>
      <entry>0.693147180559945</entry>
     </row>

     <row>
      <entry>log(<type>double precision</type>)<indexterm><primary>log()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>log()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--base 10 logarithm-->底10（10 base）の対数</entry>
      <entry>log(100.0)</entry>
      <entry>2</entry>
     </row>

     <row>
      <entry>log(<Parameter>base</parameter> <type>numeric</type>, 
             <Parameter>x</parameter> <type>numeric</type>)<indexterm><primary>log()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>log()</secondary></indexterm>
      </entry>
      <entry><type>numeric</type></entry>
      <entry><!--logarithm to specified base-->指定された底の対数</entry>
      <entry>log(2.0, 64.0)</entry>
      <entry>6.0000000000</entry>
     </row>

     <row>
      <entry>mod(<Parameter>y</parameter>, <Parameter>x</parameter>)<indexterm><primary>mod()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>mod()</secondary></indexterm></entry>
      <entry>（引数と同じデータ型）</entry>
      <entry><!--remainder (modulo) of the division--><Parameter>y</parameter>/
             <Parameter>x</parameter>の余り
      </entry>
      <entry>mod(9,4)</entry>
      <entry>1</entry>
     </row>

     <row>
      <entry>pi()</entry>
      <entry><type>double precision</type><indexterm><primary>pi()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>pi()</secondary></indexterm></entry>
      <entry><!--<quote>Pi</quote> constant-->円周率定数</entry>
      <entry>pi()</entry>
      <entry>3.14159265358979</entry>
     </row>

     <row>
      <entry>pow(<type>double precision</type>, <type>double precision</type>)<indexterm><primary>pow(</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>pow(</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--raise a number to the specified exponent-->第一引数を第二引数乗する
      </entry>
      <entry>pow(9.0, 3.0)</entry>
      <entry>729.0</entry>
     </row>

     <row>
      <entry>radians(<type>double precision</type>)<indexterm><primary>radians()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>radians()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--convert degrees to radians-->度をラジアンに変換</entry>
      <entry>radians(45.0)</entry>
      <entry>0.785398163397448</entry>
     </row>

     <row>
      <entry>random()<indexterm><primary>random()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>random()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--a pseudo-random value between 0.0 to 1.0-->0.0から1.0までの疑似乱数
      </entry>
      <entry>random()</entry>
      <entry></entry>
     </row>

     <row>
      <entry>round(<type>double precision</type>)<indexterm><primary>round()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>round()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--round to nearest integer-->四捨五入</entry>
      <entry>round(42.4)</entry>
      <entry>42</entry>
     </row>

     <row>
      <entry>round(<Parameter>value</parameter> <type>numeric</type>, 
             <Parameter>scale</parameter> <type>integer</type>)<indexterm><primary>round()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>round()</secondary></indexterm>
      </entry>
      <entry><type>numeric</type></entry>
      <entry><!--round to specified number of decimal places-->指定された小数桁で四捨五入
      </entry>
      <entry>round(42.4382, 2)</entry>
      <entry>42.44</entry>
     </row>
<!--
     <row>
      <entry>setseed(<replaceable>new-seed</replaceable>)<indexterm><primary>setseed()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>setseed()</secondary></indexterm></entry>
      <entry>set seed for subsequent random() calls</entry>
      <entry>setseed(0.54823)</entry>
      <entry></entry>
     </row>
-->
     <row>
      <entry>sqrt(<type>double precision</type>)<indexterm><primary>sqrt()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>sqrt()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--square root-->平方根</entry>
      <entry>sqrt(2.0)</entry>
      <entry>1.4142135623731</entry>
     </row>

     <row>
      <entry>trunc(<type>double precision</type>)<indexterm><primary>trunc()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>trunc()</secondary></indexterm></entry>
      <entry><type>double precision</type></entry>
      <entry><!--truncate (toward zero)-->0に近い数に切り捨て</entry>
      <entry>trunc(42.8)</entry>
      <entry>42</entry>
     </row>

     <row>
      <entry>trunc(<Parameter>value</parameter> <type>numeric</type>, 
             <Parameter>scale</parameter> <type>integer</type>)<indexterm><primary>trunc()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>trunc()</secondary></indexterm>
      </entry>
      <entry><type>numeric</type></entry>
      <entry><!--truncate to specified number of decimal places-->指定された小数点で切り捨て
      </entry>
      <entry>trunc(42.4382, 2)</entry>
      <entry>42.43</entry>
     </row>

    </tbody>
   </tgroup>
  </table>

  <para>
   <!--The functions <function>exp</function>, <function>ln</function>,
   <function>log</function>, <function>pow</function>,
   <function>round</function> (1 argument), <function>sqrt</function>,
   and <function>trunc</function> (1 argument) are also available for
   the type <type>numeric</type> in place of <type>double
   precision</type>.  Many of these functions are implemented on top
   of the host system's C library and behavior in boundary cases could
   therefore vary depending on the operating system.-->

   <function>exp</function>関数、<function>ln</function>関数、<function>log</function>関数、<function>pow</function>関数、<function>round</function>関数（引数1個）、<function>sqrt</function>関数、<function>trunc</function>関数（引数1個）では、<type>double precision</type>型の変わりに<type>numeric</type>型を使用することも可能です。これらの多くの関数はホストシステムのCライブラリの上に構築されていますので、場合によってはOS間での動作が異なることがあるかもしれません。
  </para>

  <table>
   <!--<title>Trigonometric Functions</title>-->
   <title>三角関数</title>
<indexterm><primary sortas="さんかくかんすう">三角関数</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="さんかくかんすう">三角関数</secondary></indexterm>
   <tgroup cols="2">
    <thead>
     <row>
      <entry><!--Function-->関数</entry>
      <entry><!--Description-->説明</entry>
     </row>
    </thead>

    <tbody>
     <row>
      <entry>acos(<replaceable>x</replaceable>)<indexterm><primary>acos()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>acos()</secondary></indexterm></entry>
      <entry><!--inverse cosine-->アークコサイン</entry>
     </row>

     <row>
      <entry>asin(<replaceable>x</replaceable>)<indexterm><primary>asin()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>asin()</secondary></indexterm></entry>
      <entry><!--inverse sine-->アークサイン</entry>
     </row>

     <row>
      <entry>atan(<replaceable>x</replaceable>)<indexterm><primary>atan()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>atan()</secondary></indexterm></entry>
      <entry><!--inverse tangent-->アークタンジェント</entry>
     </row>

     <row>
      <entry>atan2(<replaceable>x</replaceable>, <replaceable>y</replaceable>)<indexterm><primary>atan2()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>atan2()</secondary></indexterm></entry>
      <entry><!--inverse tangent of--> <replaceable>y</replaceable>/
             <replaceable>x</replaceable>のアークタンジェント</entry>
     </row>

     <row>
      <entry>cos(<replaceable>x</replaceable>)<indexterm><primary>cos()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>cos()</secondary></indexterm></entry>
      <entry><!--cosine-->コサイン</entry>
     </row>

     <row>
      <entry>cot(<replaceable>x</replaceable>)<indexterm><primary>cot()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>cot()</secondary></indexterm></entry>
      <entry><!--cotangent-->コタンジェント</entry>
     </row>

     <row>
      <entry>sin(<replaceable>x</replaceable>)<indexterm><primary>sin()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>sin()</secondary></indexterm></entry>
      <entry><!--sine-->サイン</entry>
     </row>

     <row>
      <entry>tan(<replaceable>x</replaceable>)<indexterm><primary>tan()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>tan()</secondary></indexterm></entry>
      <entry><!--tangent-->タンジェント</entry>
     </row>
    </tbody>
   </tgroup>
  </table>

  <para>
   <!--All trigonometric functions have arguments and return values of
   type <type>double precision</type>.-->

   すべての三角関数の引数と返り値は<type>double precision</type>型です。

  </para>

 </sect1>


 <sect1 id="functions-string">
  <!--<title>String Functions and Operators</title>-->
  <title>文字列関数と演算子</title>
<indexterm><primary sortas="もじれつかんすう">文字列関数</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="もじれつかんすう">文字列関数</secondary></indexterm>
<indexterm><primary sortas="もじれつえんざんし">文字列演算子</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="もじれつえんざんし">文字列演算子</secondary></indexterm>

  <para>
   <!--This section describes functions and operators for examining and
   manipulating string values.  Strings in this context include values
   of all the types <type>CHARACTER</type>, <type>CHARACTER
   VARYING</type>, and <type>TEXT</type>.  Unless otherwise noted, all
   of the functions listed below work on all of these types, but be
   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.  Some functions also exist
   natively for bit string types.-->

   このセクションでは文字列を調べたり、操作するための関数や演算子について説明しています。この文書の中で文字列といった場合、<type>CHARACTER</type>型、<type>CHARACTER VARYING</type>型、<type>TEXT</type>型を意味します。補足説明がない限り、ここに書かれている関数はこれらすべての型で使用することができます。しかし、<type>CHARACTER</type>型を使う場合は、自動挿入などの影響に注意してください。一般的に、ここで紹介されている関数は、文字データ型以外のデータ型であっても、先にそれを文字データ型に変換することによって使用することができます。また、ビット列型のためだけに使用する関数もいくつかあります。
  </para>

  <para>
   <!--<acronym>SQL</acronym> defines some string functions with a special syntax where
   certain keywords rather than commas are used to separate the
   arguments.  Details are in <xref linkend="functions-string-sql">.
   These functions are also implemented using the regular syntax for
   function invocation.  (See <xref linkend="functions-string-other">.)-->

   <acronym>SQL</acronym>では、引数の区切りをカンマではなく、特定のキーワードを使用する特別な構文を持った文字列関数を定義しています。詳細は<xref linkend="functions-string-sql">を参照してください。また、これらの関数は関数の呼び出しの際に使用するために、通常の構文でも実装されています。
  </para>

  <table id="functions-string-sql">
   <!--<title><acronym>SQL</acronym> String Functions and Operators</title>-->
   <title><acronym>SQL</acronym>文字列関数と演算子</title>
   <tgroup cols="5">
    <thead>
     <row>
      <entry><!--Function-->関数/演算子</entry>
      <entry><!--Return Type-->返り値</entry>
      <entry><!--Description-->説明</entry>
      <entry><!--Example-->例</entry>
      <entry><!--Result-->結果</entry>  
     </row>
    </thead>

    <tbody>
     <row>
      <entry><Parameter>string</parameter> <literal>||</literal>
              <Parameter>string</parameter><indexterm><primary>||</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>||</secondary></indexterm>
      </entry>
      <entry><type>text</type> </entry>
      <entry><!--string concatenation-->文字列の連結</entry>
      <entry>'Postgre' || 'SQL'</entry>
      <entry>PostgreSQL</entry>
     </row>

     <row>
      <entry>char_length(<Parameter>string</parameter>)、
             character_length(<Parameter>string</parameter>)<indexterm><primary>char_length()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>char_length()</secondary></indexterm><indexterm><primary>character_length()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>character_length()</secondary></indexterm>
      </entry>
      <entry><type>integer</type></entry>
      <entry><!--length of string-->文字列の長さ</entry>
      <entry>char_length('jose')</entry>
      <entry>4</entry>
     </row>

     <row>
      <entry>lower(<Parameter>string</parameter>)<indexterm><primary>lower()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>lower()</secondary></indexterm></entry>
      <entry><type>text</type></entry>
      <entry><!--Convert string to lower case-->文字列を小文字に変換</entry>
      <entry>lower('TOM')</entry>
      <entry>tom</entry>
     </row>

     <row>
      <entry>octet_length(<Parameter>string</parameter>)<indexterm><primary>octet_length()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>octet_length()</secondary></indexterm></entry>
      <entry><type>integer</type></entry>
      <entry><!--number of bytes in string-->文字列のバイト数</entry>
      <entry>octet_length('jose')</entry>
      <entry>4</entry>
     </row>

     <row>
      <entry>position(<Parameter>substring</parameter> in 
             <Parameter>string</parameter>)<indexterm><primary>position()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>position()</secondary></indexterm>
      </entry>
      <entry><type>integer</type></entry>
      <entry><!--location of specified substring-->指定部分文字列のある場所</entry>
      <entry>position('om' in 'Thomas')</entry>
      <entry>3</entry>
     </row>

     <row>
      <entry>substring(<Parameter>string</parameter> 
            <optional>from <type>integer</type></optional>
            <optional>for <type>integer</type></optional>)<indexterm><primary>substring()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>substring()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!--extract substring-->指定部分文字列の取り出し</entry>
      <entry>substring('Thomas' from 2 for 3)</entry>
      <entry>hom</entry>
     </row>

     <row>
      <entry>trim(<optional>leading | trailing | both</optional>
       <optional><Parameter>characters</parameter></optional> from
       <Parameter>string</parameter>)<indexterm><primary>trim()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>trim()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!--Removes the longest string containing only the
       <Parameter>characters</parameter> (a space by default) from the
       beginning/end/both ends of the <Parameter>string</parameter>.-->
       文字列<Parameter>string</parameter>の先頭/末尾/その両方から引数文字<Parameter>characters</parameter>（デフォルトでは空）のみを含む最長文字列を削除する
      </entry>
      <entry>trim(both 'x' from 'xTomx')</entry>
      <entry>Tom</entry>
     </row>

     <row>
      <entry>upper(<Parameter>string</parameter>)<indexterm><primary>upper()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>upper()</secondary></indexterm></entry>
      <entry><type>text</type></entry>
      <entry><!--Convert string to upper case.-->文字列を大文字に変換</entry>
      <entry>upper('tom')</entry>
      <entry>TOM</entry>
     </row>
    </tbody>
   </tgroup>
  </table>

  <para>
   <!--Additional string manipulation functions are available and are
   listed below.  Some of them are used internally to implement the
   <acronym>SQL</acronym> string functions listed above.-->

   下記はその他の文字列操作の関数です。これらの関数の中には上で述べた<acronym>SQL</acronym>文字列関数を実装するために内部で使用されているものもあります。

  </para>

  <table id="functions-string-other">
   <!--<title>Other String Functions</title>-->
   <title>その他の文字列関数</title>
   <tgroup cols="5">
    <thead>
     <row>
      <entry><!--Function-->関数</entry>
      <entry><!--Return type-->返り値</entry>
      <entry><!--Description-->説明</entry>
      <entry><!--Example-->例</entry>
      <entry><!--Result-->結果</entry>
     </row>
    </thead>

    <tbody>
     <row>
      <entry>ascii(<type>text</type>)<indexterm><primary>ascii()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>ascii()</secondary></indexterm></entry>
      <entry>integer</entry>
      <entry><!--Returns the <acronym>ASCII</acronym> 
             code of the first character of the argument.-->
             <type>text</type>の最初の文字の<acronym>ASCII</acronym>コードを返す
      </entry>
      <entry>ascii('x')</entry>
      <entry>120</entry>
     </row>

     <row>
      <entry>btrim(<Parameter>string</parameter> <type>text</type>,
            <Parameter>trim</parameter> <type>text</type>)<indexterm><primary>btrim()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>btrim()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!-- Remove (trim) the longest string consisting only of characters
       in <Parameter>trim</parameter> from the start and end of
       <Parameter>string</parameter>.-->
       <Parameter>string</parameter>の先頭/末尾から引数<Parameter>trim</parameter>のみを含んだ、最長文字列を削除する
      </entry>
      <entry>btrim('xyxtrimyyx','xy')</entry>
      <entry>trim</entry>
     </row>

     <row>
      <entry>chr(<type>integer</type>)<indexterm><primary>chr()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>chr()</secondary></indexterm></entry>
      <entry><type>text</type></entry>
      <entry><!--Returns the character with the given <acronym>ASCII</acronym> code.-->
             アスキーコード<type>integer</type>を文字に変換する
      </entry>
      <entry>chr(65)</entry>
      <entry>A</entry>
     </row>

     <row>
      <entry>initcap(<type>text</type>)<indexterm><primary>initcap()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>initcap()</secondary></indexterm></entry>
      <entry><type>text</type></entry>
      <entry><!--Converts first letter of each word (whitespace separated) to upper case.-->
             <type>text</type>の各単語（スペースがセパレータ）の最初の文字を大文字に変換する
      </entry>
      <entry>initcap('hello thomas')</entry>
      <entry>Hello Thomas</entry>
     </row>

     <row>
      <entry>lpad(<Parameter>string</parameter> <type>text</type>,
       <Parameter>length</parameter> <type>integer</type>
       <optional>, <Parameter>fill</parameter> <type>text</type></optional>)<indexterm><primary>lpad()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>lpad()</secondary></indexterm>
      </entry>
      <entry>text</entry>
      <entry><!--Fills up the <Parameter>string</parameter> to length
       <Parameter>length</parameter> by prepending the characters
       <Parameter>fill</parameter> (a space by default).  If the
       <Parameter>string</parameter> is already longer than
       <Parameter>length</parameter> then it is truncated (on the
       right).-->
       <Parameter>string</parameter>に<Parameter>length</parameter>まで<Parameter>fill</parameter>（デフォルトはスペース）を左側に追加する。もし<Parameter>string</parameter>が<Parameter>length</parameter>よりもすでに長い場合は（右に）切り捨てられる
      </entry>
      <entry>lpad('hi', 5, 'xy')</entry>
      <entry>xyxhi</entry>
     </row>

     <row>
      <entry>ltrim(<Parameter>string</parameter> <type>text</type>, 
             <Parameter>trim</parameter> <type>text</type>)<indexterm><primary>ltrim()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>ltrim()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!--Removes the longest string containing only characters from
       <Parameter>trim</parameter> from the start of the string.-->
       <Parameter>string</parameter>の先頭から<Parameter>trim</parameter>に含まれているすべての文字を削除する
      </entry>
      <entry>ltrim('zzzytrim','xyz')</entry>
      <entry>trim</entry>
     </row>

     <row>
      <entry>repeat(<type>text</type>, <type>integer</type>)<indexterm><primary>repeat()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>repeat()</secondary></indexterm></entry>
      <entry><type>text</type></entry>
      <entry><!--Repeat text a number of times.-->
             <type>text</type>を<type>integer</type>回繰り返す
      </entry>
      <entry>repeat('Pg', 4)</entry>
      <entry>PgPgPgPg</entry>
     </row>

     <row>
      <entry>rpad(<Parameter>string</parameter> <type>text</type>,
       <Parameter>length</parameter> <type>integer</type>
       <optional>, <Parameter>fill</parameter> <type>text</type></optional>)<indexterm><primary>rpad()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>rpad()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!--Fills up the <Parameter>string</parameter> to length
       <Parameter>length</parameter> by appending the characters
       <Parameter>fill</parameter> (a space by default).  If the
       <Parameter>string</parameter> is already longer than
       <Parameter>length</parameter> then it is truncated.-->
       <Parameter>string</parameter>に<Parameter>length</parameter>まで<Parameter>fill</parameter>（デフォルトはスペース）を右側に追加する。もし<Parameter>string</parameter>が<Parameter>length</parameter>よりもすでに長い場合は切り捨てられる
      </entry>
      <entry>rpad('hi', 5, 'xy')</entry>
      <entry>hixyx</entry>
     </row>

     <row>
      <entry>rtrim(<Parameter>string</parameter> <type>text</type>, <Parameter>trim</parameter>
              <type>text</type>)<indexterm><primary>rtrim()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>rtrim()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!--Removes the longest string containing only characters from
       <Parameter>trim</parameter> from the end of the string.-->
       <Parameter>string</parameter>の末尾から<Parameter>trim</parameter>に含まれている文字をすべて削除する
      </entry>
      <entry>rtrim('trimxxxx','x')</entry>
      <entry>trim</entry>
     </row>

     <row>
      <entry>strpos(<Parameter>string</parameter>, <Parameter>substring</parameter>)<indexterm><primary>strpos()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>strpos()</secondary></indexterm></entry>
      <entry><type>text</type></entry>
      <entry><!--Locates specified substring. (same as
       <literal>position(<Parameter>substring</parameter> in
       <Parameter>string</parameter>)</literal>, but note the reversed
       argument order)-->
       指定された部分文字列の場所を返す（<literal>position(<Parameter>substring</parameter> in <Parameter>string</parameter>)</literal>と同じですが、引数の順序が異なることに注意してください）。
      </entry>
      <entry>strpos('high','ig')</entry>
      <entry>2</entry>
     </row>

     <row>
      <entry>substr(<Parameter>string</parameter>, <Parameter>from</parameter> <optional>, 
             <Parameter>count</parameter></optional>)<indexterm><primary>substr()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>substr()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!--Extracts specified substring. (same as <literal>substring
       (<Parameter>string</parameter> from <Parameter>from</parameter> 
       for <Parameter>count</parameter>)</literal>)-->
       文字列の指定された場所から指定された場所までの部分文字列を取り出す。<literal>substring(<Parameter>string</parameter> from <Parameter>from</parameter> for <Parameter>count</parameter>)</literal>と同じ
      </entry>
      <entry>substr('alphabet', 3, 2)</entry>
      <entry>ph</entry>
     </row>

     <row>
      <entry>to_ascii(<type>text</type> <optional>, <Parameter>encoding</parameter>
             </optional>)<indexterm><primary>to_ascii()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>to_ascii()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!--Converts text from multibyte encoding to <acronym>ASCII</acronym>.-->
             マルチバイトのテキストを<acronym>ASCII</acronym>に変換する
      </entry>
      <entry>to_ascii('Karel')</entry>
      <entry>Karel</entry>
     </row>

     <row>
      <entry>translate(<Parameter>string</parameter> <type>text</type>,
       <Parameter>from</parameter> <type>text</type>,
       <Parameter>to</parameter> <type>text</type>)<indexterm><primary>translate()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>translate()</secondary></indexterm>
      </entry>
      <entry><type>text</type></entry>
      <entry><!--Any character in <Parameter>string</parameter> that matches a
       character in the <Parameter>from</parameter> set is replaced by
       the corresponding character in the <Parameter>to</parameter>
       set.-->
       <Parameter>string</parameter>のすべての文字において、<Parameter>from</parameter>で指定された文字と一致するものを、<Parameter>to</parameter>で指定された該当する文字と置き換える
      </entry>
      <entry>translate('12345', '14', 'ax')</entry>
      <entry>a23x5</entry>
     </row>       

    </tbody>
   </tgroup>
  </table>

  <para>
   <!--The <function>to_ascii</function> function supports conversion from
   LATIN1, LATIN2, WIN1250 (CP1250) only.-->
   <function>to_ascii</function>は、LATIN1、LATIN2、WIN1250（CP1250）からの変換のみのサポートとなっています。
  </para>
 </sect1>


 <sect1 id="functions-matching">
  <!--<title>Pattern Matching</title>-->
  <title>パターンマッチング</title>
<indexterm><primary sortas="ぱたーんまっちんぐ">パターンマッチング</primary></indexterm>
  <para>
   <!--There are two separate approaches to pattern matching provided by
   <productname>Postgres</productname>:  the <acronym>SQL</acronym>
   <function>LIKE</function> operator and
   <acronym>POSIX</acronym>-style regular expressions.-->

   <productname>Postgres</productname>では、<acronym>SQL</acronym>の<function>LIKE</function>演算と<acronym>POSIX</acronym>形式の正規表現の2種類の方法でパターンマッチングを行えます。
  </para>

  <tip>
   <para>
    <!--If you have pattern matching needs that go beyond this, or want to
    make pattern-driven substitutions or translations, consider
    writing a user-defined function in Perl or Tcl.-->
    これらのパターンマッチング機能以上のものを必要とされる場合や、パターンの置換、変換などはPerlやTclのユーザー定義関数を作成してみてください。
   </para>
  </tip>

  <sect2 id="functions-like">
   <!--<title>Pattern Matching with <function>LIKE</function></title>-->
   <title><function>LIKE</function>述語を使用したパターンマッチング</title>
<indexterm><primary>LIKE</primary></indexterm>
<indexterm><primary sortas="ぱたーんまっちんぐ">パターンマッチング</primary><secondary>LIKE</secondary></indexterm>
<synopsis>
<replaceable>string</replaceable> LIKE <replaceable>pattern</replaceable> 
  <optional> ESCAPE <replaceable>escape-character</replaceable> </optional>
<replaceable>string</replaceable> NOT LIKE <replaceable>pattern</replaceable> 
  <optional> ESCAPE <replaceable>escape-character</replaceable> </optional>
</synopsis>

   <para>
    <!--Every <replaceable>pattern</replaceable> defines a set of strings.
    The <function>LIKE</function> expression returns true if the
    <replaceable>string</replaceable> is contained in the set of
    strings represented by <replaceable>pattern</replaceable>.  (As
    expected, the <function>NOT LIKE</function> expression returns
    false if <function>LIKE</function> returns true, and vice versa.
    An equivalent expression is <literal>NOT
    (<replaceable>string</replaceable> LIKE
    <replaceable>pattern</replaceable>)</literal>.)-->

   すべての<replaceable>pattern</replaceable>は、ある文字列の集合を定義します。<function>LIKE</function>式は、<replaceable>string</replaceable>が<replaceable>pattern</replaceable>で表現される集合の中に含まれているならばtrue（真）を返します（想像に難くないですが、<function>LIKE</function>述語でtrue（真）が返るならば、<function>NOT LIKE</function>述語ではfalse（偽）となります。<literal>NOT (<replaceable>string</replaceable> LIKE<replaceable>pattern</replaceable>)</literal>も同じ動作をします）。
   </para>

   <para>
    <!--If <replaceable>pattern</replaceable> does not contain percent
    signs or underscore, then the pattern only represents the string
    itself; in that case <function>LIKE</function> acts like the
    equals operator.  An underscore (<literal>_</literal>) in
    <replaceable>pattern</replaceable> stands for (matches) any single
    character; a percent sign (<literal>%</literal>) matches any string
    of zero or more characters.-->

    <replaceable>pattern</replaceable>にパーセント記号（%）やアンダースコア（_）が含まれていないならば、その<replaceable>pattern</replaceable>は文字列そのものを意味します。この場合、<function>LIKE</function>はイコール演算子のような働きを行います。<replaceable>pattern</replaceable>内で使われるアンダースコア（<literal>_</literal>）はあらゆる任意の1文字を意味し、パーセント記号（<literal>%</literal>）は0文字以上の任意の文字を意味します。<indexterm><primary>%</primary></indexterm><indexterm><primary>_</primary></indexterm>
   
   </para>

   <informalexample>
    <para>
     <!--Some examples:-->例を示します。</para>
<programlisting>
'abc' LIKE 'abc'    <lineannotation>true</lineannotation>
'abc' LIKE 'a%'     <lineannotation>true</lineannotation>
'abc' LIKE '_b_'    <lineannotation>true</lineannotation>
'abc' LIKE 'c'      <lineannotation>false</lineannotation>
</programlisting>
   </informalexample>

   <para>
    <!--<function>LIKE</function> pattern matches always cover the entire
    string.  To match a pattern anywhere within a string, the
    pattern must therefore start and end with a percent sign.-->

    <function>LIKE</function>では、パターンマッチは文字列の最初から最後まですべてで行われます。したがって、文字列のある部分に対してパターンマッチを行いたい場合は、パターンの最初と最後にパーセント記号を付ける必要があります。
   </para>

   <para>
    <!--To match a literal underscore or percent sign without matching
    other characters, the respective character in
    <replaceable>pattern</replaceable> must be 
    preceded by the escape character.  The default escape
    character is the backslash but a different one may be selected by
    using the <literal>ESCAPE</literal> clause.  To match the escape
    character itself, write two escape characters.-->
    アンダースコアやパーセント記号そのものをパターンマッチさせたい場合は<replaceable>pattern</replaceable>の文字1字づつエスケープ文字で指定する必要があります。デフォルトのエスケープ文字はバックスラッシュですが、<literal>ESCAPE</literal>句を使用することによって変更が可能です。エスケープ文字そのものとのマッチさせたい場合は、エスケープ文字を2つ記述してください。
   </para>

   <para>
    <!--Note that the backslash already has a special meaning in string
    literals, so to write a pattern constant that contains a backslash
    you must write two backslashes in the query.  You can avoid this by
    selecting a different escape character with <literal>ESCAPE</literal>.-->

    文字列において、バックスラッシュが特別な意味をすでに持っていることに注意してください。したがって、パターンの定数にバックスラッシュが含まれるものを記述する際には、問い合わせに必ずバックスラッシュを2つ記述してください。これを回避するには<literal>ESCAPE</literal>で別のエスケープ文字を選択してください。
   </para>

   <para>
    <!--The keyword <token>ILIKE</token> can be used instead of
    <token>LIKE</token> to make the match case insensitive according
    to the active locale.  This is not in the <acronym>SQL</acronym> standard but is a
    <productname>Postgres</productname> extension.-->

    現在のロケールに従った大文字/小文字を区別しないマッチを行う際には、<token>LIKE</token>ではなく、<token>ILIKE</token>を使用することも可能です。これは標準<acronym>SQL</acronym>ではなく、<productname>Postgres</productname>独自の拡張です。
   </para>

   <para>
    <!--The operator <literal>~~</literal> is equivalent to
    <function>LIKE</function>, and <literal>~~*</literal> corresponds to
    <function>ILIKE</function>.  There are also
    <literal>!~~</literal> and <literal>!~~*</literal> operators that
    represent <function>NOT LIKE</function> and <function>NOT
    ILIKE</function>.  All of these are also
    <productname>Postgres</productname>-specific.-->

     <literal>~~</literal>演算子は<function>LIKE</function>と同様で、<literal>~~*</literal>は<function>ILIKE</function>と対応しています。また、<function>NOT LIKE</function>には<literal>!~~</literal>、<function>NOT ILIKE</function>には<literal>!~~*</literal>の演算子が割り当てられています。これらも<productname>Postgres</productname>特有のものです。

   </para>
  </sect2>


  <sect2 id="functions-regexp">
   <!--<title><acronym>POSIX</acronym> Regular Expressions</title>-->
   <title><acronym>POSIX</acronym>正規表現</title>
<indexterm><primary sortas="POSIXせいきひょうげん">POSIX正規表現</primary></indexterm>
<indexterm><primary sortas="せいきひょうげん">正規表現</primary></indexterm>
   <table>
    <!--<title>Regular Expression Match Operators</title>-->
    <title>正規表現演算子</title>

    <tgroup cols="3">
     <thead>
      <row>
       <entry><!--Operator-->演算子</entry>
       <entry><!--Description-->説明</entry>
       <entry><!--Example-->例</entry>
      </row>
     </thead>

     <tbody>
       <ROW>
	<ENTRY><literal>~</literal> <indexterm><primary>~</primary></indexterm><indexterm><primary sortas="せいきひょうげん">正規表現</primary><secondary>~</secondary></indexterm></ENTRY>
	<ENTRY><!--Matches regular expression, case sensitive-->
               正規表現に適合する。大文字/小文字を区別する
        </ENTRY>
	<ENTRY>'thomas' ~ '.*thomas.*'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY><literal>~*</literal> <indexterm><primary>~*</primary></indexterm><indexterm><primary sortas="せいきひょうげん">正規表現</primary><secondary>~*</secondary></indexterm></ENTRY>
	<ENTRY><!--Matches regular expression, case insensitive-->
               正規表現に適合する。大文字/小文字を区別しない
        </ENTRY>
	<ENTRY>'thomas' ~* '.*Thomas.*'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY><literal>!~</literal> <indexterm><primary>!~</primary></indexterm><indexterm><primary sortas="せいきひょうげん">正規表現</primary><secondary>!~</secondary></indexterm></ENTRY>
	<ENTRY><!--Does not match regular expression, case sensitive-->
               正規表現に適合しない。大文字/小文字を区別する
	</ENTRY>
	<ENTRY>'thomas' !~ '.*Thomas.*'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY><literal>!~*</literal> <indexterm><primary>!~*</primary></indexterm><indexterm><primary sortas="せいきひょうげん">正規表現</primary><secondary>!~*</secondary></indexterm></ENTRY>
	<ENTRY><!--Does not match regular expression, case insensitive-->
               正規表現に適合しない。大文字/小文字を区別しない
	</ENTRY>
	<ENTRY>'thomas' !~* '.*vadim.*'</ENTRY>
       </ROW>
     </tbody>
    </tgroup>
   </table>

   <para>
    <!--<acronym>POSIX</acronym> regular expressions provide a more powerful means for
    pattern matching than the <function>LIKE</function> function.
    Many Unix tools such as <command>egrep</command>,
    <command>sed</command>, or <command>awk</command> use a pattern
    matching language that is similar to the one described here.-->

    <acronym>POSIX</acronym>正規表現のパターンマッチングは<function>LIKE</function>述語よりも強力なものです。<command>egrep</command>や<command>sed</command>、<command>awk</command>などの多くのUnixツールはここで説明されているものと同じような正規表現言語を使用しています。 
    </para>

   <para>
    <!--A regular expression is a character sequence that is an
    abbreviated definition of a set of strings (a <firstterm>regular
    set</firstterm>).  A string is said to match a regular expression
    if it is a member of the regular set described by the regular
    expression.  As with <function>LIKE</function>, pattern characters
    match string characters exactly unless they are special characters
    in the regular expression language - but regular expressions use
    different special characters than <function>LIKE</function> does.
    Unlike <function>LIKE</function> patterns, a
    regular expression is allowed to match anywhere within a string, unless
    the regular expression is explicitly anchored to the beginning or
    end of the string.-->

    正規表現は文字のシーケンスで、ある文字列の集合（<firstterm>regular set</firstterm>）の短縮された定義です。文字列が、ある正規表現が記述する文字列集合の要素である場合、その文字列はその正規表現と一致するといえます。<function>LIKE</function>の場合と同様に、正規表現言語で特別な意味を持つ文字を除き、文字列とパターン文字列は完全に一致するかを検証します。しかし、正規表現では<function>LIKE</function>述語が使用する特別文字とは異なるものを使用します。<function>LIKE</function>述語のパターンとは違って、「文字列の頭から」や「後から」などの指定がない限り正規表現は文字列のどの部分でもマッチできます。
   </para>


<!-- derived from the re_format.7 man page -->
   <para>
    <!--Regular expressions (<quote>RE</quote>s), as defined in <acronym>POSIX</acronym>
    1003.2, come in two forms: modern REs (roughly those of
    <command>egrep</command>; 1003.2 calls these
    <quote>extended</quote> REs) and obsolete REs (roughly those of
    <command>ed</command>; 1003.2 <quote>basic</quote> REs).
    <productname>Postgres</productname> implements the modern form.-->

    正規表現（<quote>RE</quote>）には2つの形式があると<acronym>POSIX</acronym>1003.2で定義されています。1つはモダンRE（modern REs、<command>egrep</command>などの正規表現で、1003.2では<quote>extended</quote> REsと呼ばれています）あと1つは旧式RE（おおむね<command>ed</command>の正規表現に相当、1003.2の基本正規表現）です。 
   </para>

   <para>
    <!--A (modern) RE is one or more non-empty
    <firstterm>branches</firstterm>, separated by
    <literal>|</literal>.  It matches anything that matches one of the
    branches.-->

    モダンREは1以上の空ではない<firstterm>ブランチ</firstterm>で、<literal>|</literal>で区切ってあります。このブランチの1つでも一致するものがあれば一致します。
   </para>

   <para>
    <!--A branch is one or more <firstterm>pieces</firstterm>,
    concatenated.  It matches a match for the first, followed by a
    match for the second, etc.-->

    ブランチとは、1以上の<firstterm>ピース</firstterm>が連なっているものです。1番目にマッチしたら、2番目、といった感じでマッチさせていきます。
   </para>

   <para>
    <!--A piece is an <firstterm>atom</firstterm> possibly followed by a
    single <literal>*</literal>, <literal>+</literal>,
    <literal>?</literal>, or <firstterm>bound</firstterm>.  An atom
    followed by <literal>*</literal> matches a sequence of 0 or more
    matches of the atom.  An atom followed by <literal>+</literal>
    matches a sequence of 1 or more matches of the atom.  An atom
    followed by <literal>?</literal> matches a sequence of 0 or 1
    matches of the atom.-->

    ピースとは<firstterm>アトム</firstterm>で、多くの場合、1つの<literal>*</literal>、<literal>+</literal>、<literal>?</literal>、<firstterm>bound</firstterm>が続きます。<literal>*</literal>が後にあるアトムは0以上のアトムと一致します。<literal>+</literal>が後にあるアトムは1以上のアトムと一致します。<literal>?</literal>が後にあるアトムは0か1のアトムと一致します。
   </para>

   <para>
    <!--A <firstterm>bound</firstterm> is <literal>{</literal> followed by
    an unsigned decimal integer, possibly followed by
    <literal>,</literal> possibly followed by another unsigned decimal
    integer, always followed by <literal>}</literal>.  The integers
    must lie between 0 and <symbol>RE_DUP_MAX</symbol> (255)
    inclusive, and if there are two of them, the first may not exceed
    the second.  An atom followed by a bound containing one integer
    <replaceable>i</replaceable> and no comma matches a sequence of
    exactly <replaceable>i</replaceable> matches of the atom.  An atom
    followed by a bound containing one integer
    <replaceable>i</replaceable> and a comma matches a sequence of
    <replaceable>i</replaceable> or more matches of the atom.  An atom
    followed by a bound containing two integers
    <replaceable>i</replaceable> and <replaceable>j</replaceable>
    matches a sequence of <replaceable>i</replaceable> through
    <replaceable>j</replaceable> (inclusive) matches of the atom.-->

    <firstterm>bound</firstterm>は、<literal>{</literal>の後に符号無し10進数整数が続き、その後には通常は<literal>,</literal>があり、その後には通常はまた符号無し10進数整数があり、必ず<literal>}</literal>が最後につきます。この符号無し10進数整数は必ず0以上、<symbol>RE_DUP_MAX</symbol>（255）以下までの数字である必要があり、2つある場合は、1つ目は2つ目より大きくなってはいけません。アトムの後に1つの整数<replaceable>i</replaceable>（カンマなし）を持っているバウンド（bound）がある場合、そのアトムはアトムの丁度<replaceable>i</replaceable>個のマッチしたシーケンスとマッチします。アトムの後に1つの整数<replaceable>i</replaceable>（カンマあり）を持っているバウンド（bound）があるアトムは、<replaceable>i</replaceable>個以上のマッチしたシーケンスとマッチします。アトムの後に2つの整数<replaceable>i</replaceable>と<replaceable>j</replaceable>があるものは、<replaceable>i</replaceable>個から<replaceable>j</replaceable>個（jも含む）のマッチしたシーケンスとマッチします。
   </para>

   <note>
    <para>
     <!--A repetition operator (<literal>?</literal>,
     <literal>*</literal>, <literal>+</literal>, or bounds) cannot
     follow another repetition operator.  A repetition operator cannot
     begin an expression or subexpression or follow
     <literal>^</literal> or <literal>|</literal>.-->

     <literal>?</literal>、<literal>*</literal>、<literal>+</literal>、バウンドなどの反復演算子は、他の反復演算子と併用することはできません。反復演算子は式やサブ表現を開始したり、<literal>^</literal>、または<literal>|</literal>の後ろに続けることはできません。
    </para>
   </note>

   <para>
    <!--An <firstterm>atom</firstterm> is a regular expression enclosed in
    <literal>()</literal> (matching a match for the regular
    expression), an empty set of <literal>()</literal> (matching the
    null string), a <firstterm>bracket expression</firstterm> (see
    below), <literal>.</literal> (matching any single character),
    <literal>^</literal> (matching the null string at the beginning of the
    input string), <literal>$</literal> (matching the null string at the end
    of the input string), a <literal>&bsol;</literal> followed by one of the
    characters <literal>^.[$()|*+?{&bsol;</literal> (matching that
    character taken as an ordinary character),  a <literal>&bsol;</literal>
    followed by any other character (matching that character taken as
    an ordinary character, as if the <literal>&bsol;</literal> had not been
    present), or a single character with no other significance
    (matching that character).  A <literal>{</literal> followed by a
    character other than a digit is an ordinary character, not the
    beginning of a bound.  It is illegal to end an RE with
    <literal>&bsol;</literal>.-->

    アトムとは、正規表現が<literal>()</literal>で囲まれているもの（その正規表現のマッチするものにマッチする）、空の<literal>()</literal>（NULL文字列と一致する）、<firstterm>bracket expression</firstterm>（ブラケット表現、後述）、<literal>.</literal>（あらゆる1文字と一致）、<literal>^</literal>（入力された文字列の先頭にあるNULL文字と一致）、<literal>$</literal>（入力された文字列の最後にあるNULL文字列と一致）、1つの<literal>&bsol;</literal>の直後に<literal>^.[$()|*+?{&bsol;</literal>のうちのどれか1文字が続いたもの（その文字を普通の文字としたものに一致）、<literal>&bsol;</literal>の直後にその他の文字（<literal>&bsol;</literal>が無視され、普通の文字とされる文字と一致）、または他の特徴がない1文字（その文字と一致）です。<literal>{</literal>の直後に数字以外の文字が続いたものは通常の文字で、バウンドの開始ではありません。<literal>&bsol;</literal>で正規表現を終了させるのは禁じられています。
   </para>

   <para>
    <!--Note that the backslash (<literal>&bsol;</literal>) already has a special
    meaning in string
    literals, so to write a pattern constant that contains a backslash
    you must write two backslashes in the query.-->

    文字列において、バックスラッシュ（<literal>&bsol;</literal>）はすでに特別な意味を持っていることに注意してください。したがって、パターンの定数にバックスラッシュが含まれるものを記述する際には、問い合わせに必ずバックスラッシュを2つ記述してください。
   </para>

   <para>
    <!--A <firstterm>bracket expression</firstterm> is a list of
    characters enclosed in <literal>[]</literal>.  It normally matches
    any single character from the list (but see below).  If the list
    begins with <literal>^</literal>, it matches any single character
    (but see below) not from the rest of the list.  If two characters
    in the list are separated by <literal>-</literal>, this is
    shorthand for the full range of characters between those two
    (inclusive) in the collating sequence,
    e.g. <literal>[0-9]</literal> in <acronym>ASCII</acronym> matches
    any decimal digit.  It is illegal for two ranges to share an
    endpoint, e.g.  <literal>a-c-e</literal>.  Ranges are very
    collating-sequence-dependent, and portable programs should avoid
    relying on them.-->

    <firstterm>ブラケット表現（bracket expression）</firstterm><indexterm><primary sortas="ぶらけっとひょうげん">ブラケット表現</primary></indexterm>とは、文字のリストが<literal>[]</literal>で囲まれたものです。通常リストにあるどの文字にもマッチします（詳しくは後述）。もしリストが<literal>^</literal>から始まるならば、残りのリストに現れない任意の一文字にマッチします（詳しくは後述）。2つの文字の間に<literal>-</literal>がある場合、これはその文字と文字の間（その文字も含む）に存在する文字のシーケンスを意味します。たとえば、<literal>[0-9]</literal>は<acronym>ASCII</acronym>マッチではすべての10進数の1文字と一致します。また、2つの範囲（range）指定で、始点/終点（エンドポイント）を共用することはできません（たとえば<literal>a-c-e</literal>）。範囲はシーケンスの照合にとても依存しているので、移植性が求められるプログラムでは使用を避けてください。
   </para>

   <para>
    <!--To include a literal <literal>]</literal> in the list, make it the
    first character (following a possible <literal>^</literal>).  To
    include a literal <literal>-</literal>, make it the first or last
    character, or the second endpoint of a range.  To use a literal
    <literal>-</literal> as the first endpoint of a range, enclose it
    in <literal>[.</literal> and <literal>.]</literal> to make it a
    collating element (see below).  With the exception of these and
    some combinations using <literal>[</literal> (see next
    paragraphs), all other special characters, including
    <literal>&bsol;</literal>, lose their special significance within a
    bracket expression.-->
    
    <literal>]</literal>をリストに含めるには、それを最初の文字（<literal>^</literal>があればその後）にしてください。<literal>-</literal>を含めたい場合は、最初か最後、または範囲（range）の2番目のエンドポイントとしてください。<literal>-</literal>を最初のエンドポイントとする場合は、照合要素（collating element、詳しくは後述）にするために<literal>-</literal>を<literal>[.</literal>と<literal>.]</literal>で囲んでください。これらの例外と<literal>[</literal>（次の段落を参照）の組み合わせ方を除き、<literal>&bsol;</literal>も含むすべての特別な意味を持つ文字はその効果をブラケット表現（bracket expression）内では失います。
   </para>

   <para>
    <!--Within a bracket expression, a collating element (a character, a
    multi-character sequence that collates as if it were a single
    character, or a collating-sequence name for either) enclosed in
    <literal>[.</literal> and <literal>.]</literal> stands for the
    sequence of characters of that collating element.  The sequence is
    a single element of the bracket expression's list.  A bracket
    expression containing a multi-character collating element can thus
    match more than one character, e.g. if the collating sequence
    includes a <literal>ch</literal> collating element, then the RE
    <literal>[[.ch.]]*c</literal> matches the first five characters of
    <literal>chchcc</literal>.-->

    ブラケット表現（bracket expression）では、<literal>[.</literal>と<literal>.]</literal>で囲まれた照合要素（1文字、または複数の文字のシーケンスで、1文字またはどちらかの照合シーケンス名）はその照合要素文字のシーケンスを意味します。シーケンスとはブラケット表現のリストの1つの要素となります。したがってブラケット表現内にマルチバイト文字がある場合は、1文字以上の文字と一致します。たとえば、照合シーケンスに<literal>ch</literal>という照合要素があったとき、REの<literal>[[.ch.]]*c</literal>では<literal>chchcc</literal>の最初の5文字とマッチします。

   </para>

   <para>
    <!--Within a bracket expression, a collating element enclosed in
    <literal>[=</literal> and <literal>=]</literal> is an equivalence
    class, standing for the sequences of characters of all collating
    elements equivalent to that one, including itself.  (If there are
    no other equivalent collating elements, the treatment is as if the
    enclosing delimiters were <literal>[.</literal> and
    <literal>.]</literal>.)  For example, if <literal>o</literal> and
    <literal>^</literal> are the members of an equivalence class, then
    <literal>[[=o=]]</literal>, <literal>[[=^=]]</literal>, and
    <literal>[o^]</literal> are all synonymous.  An equivalence class
    may not be an endpoint of a range.-->

    ブラケット表現内で、<literal>[=</literal>と<literal>=]</literal>で囲まれた照合要素は同等クラス（equivalence class）で、それと等しいすべての照合要素の文字で構成されたシーケンス（それそのものも含む）を意味します（等しい照合要素がない場合は、<literal>[.</literal>と<literal>^</literal>は区切り文字として扱われます）。たとえば、<literal>o</literal>と<literal>^</literal>が同等クラスの要素だった場合、<literal>[[=o=]]</literal>、<literal>[[=^=]]</literal>、<literal>[o^]</literal>はすべて同義となります。同等クラスは範囲（range）のエンドポイントにはできません。
    
   </para>

   <para>
    <!--Within a bracket expression, the name of a character class
    enclosed in <literal>[:</literal> and <literal>:]</literal> stands
    for the list of all characters belonging to that class.  Standard
    character class names are: <literal>alnum</literal>,
    <literal>alpha</literal>, <literal>blank</literal>,
    <literal>cntrl</literal>, <literal>digit</literal>,
    <literal>graph</literal>, <literal>lower</literal>,
    <literal>print</literal>, <literal>punct</literal>,
    <literal>space</literal>, <literal>upper</literal>,
    <literal>xdigit</literal>.  These stand for the character classes
    defined in
    <citerefentry><refentrytitle>ctype</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
    A locale may provide others.  A character class may not be used as
    an endpoint of a range.-->

    ブラケット表現内で、<literal>[:</literal>と<literal>:]</literal>で囲まれた文字クラス（character class）の名前は、そのクラスに属するすべての文字のリストを意味します。下記は標準な文字クラスの名前です：<literal>alnum</literal>、<literal>alpha</literal>、<literal>blank</literal>、<literal>cntrl</literal>、<literal>digit</literal>、<literal>graph</literal>、<literal>lower</literal>、<literal>print</literal>、<literal>punct</literal>、<literal>space</literal>、<literal>upper</literal>、<literal>xdigit</literal>。これは、<citerefentry><refentrytitle>ctype</refentrytitle><manvolnum>3</manvolnum></citerefentry>で定義されている文字クラスを意味します。ロケールでは他のものも使用可能となる場合があります。文字クラスは範囲（range）のエンドポイントにはできません。
   </para>

   <para>
    <!--There are two special cases of bracket expressions:  the bracket
    expressions <literal>[[:<:]]</literal> and
    <literal>[[:>:]]</literal> match the null string at the beginning
    and end of a word respectively.  A word is defined as a sequence
    of word characters which is neither preceded nor followed by word
    characters.  A word character is an alnum character (as defined by
    <citerefentry><refentrytitle>ctype</refentrytitle><manvolnum>3</manvolnum></citerefentry>)
    or an underscore.  This is an extension, compatible with but not
    specified by POSIX 1003.2, and should be used with caution in
    software intended to be portable to other systems.-->

    ブラケット表現には<literal>[[:<:]]<!--[[:&lt;:]]--></literal>と<literal>[[:>:]]<!--[[:&gt;:]]--></literal>の2つの特殊なケースがあります。両方とも単語の始めと終わりそれぞれのNULL文字列にマッチします。単語とはその前後に別の単語文字（word characters）が存在しない、単語文字（word characters）のシーケンスと定義されています。単語文字（word characters）とは(<citerefentry><refentrytitle>ctype</refentrytitle><manvolnum>3</manvolnum></citerefentry>で定義されているアルナム（alnum）文字、またはアンダースコアのことです。これは拡張で、POSIX 1003.2では明記されていませんが、互換性があります。しかし、他のシステムなどに移植される予定のソフトウェアなどでは注意が必要です。
   </para>

   <para>
    <!--In the event that an RE could match more than one substring of a
    given string, the RE matches the one starting earliest in the
    string.  If the RE could match more than one substring starting at
    that point, it matches the longest.  Subexpressions also match the
    longest possible substrings, subject to the constraint that the
    whole match be as long as possible, with subexpressions starting
    earlier in the RE taking priority over ones starting later.  Note
    that higher-level subexpressions thus take priority over their
    lower-level component subexpressions.-->

    REが1つ以上の指定部分文字列と一致した際、REでは最初に一致した文字列とマッチします。その場所からまた1つ以上の指定部分文字列と一致した際には最も長い文字列と一致します。サブ表現では、すべてのマッチは可能な限り長いという制約を条件とし、可能な限り長い指定部分文字列ともマッチし、その際、REでは最初の指定部分文字列を後のものよりも優先させてマッチします。
   </para>

   <para>
    <!--Match lengths are measured in characters, not collating
    elements.  A null string is considered longer than no match at
    all.  For example, <literal>bb*</literal> matches the three middle
    characters of <literal>abbbc</literal>,
    <literal>(wee|week)(knights|nights)</literal> matches all ten
    characters of <literal>weeknights</literal>, when
    <literal>(.*).*</literal> is matched against
    <literal>abc</literal> the parenthesized subexpression matches all
    three characters, and when <literal>(a*)*</literal> is matched
    against <literal>bc</literal> both the whole RE and the
    parenthesized subexpression match the null string.-->

    マッチの長さは参照要素ではなく、文字（character）で測られます。空文字列はまったく一致するものがない文字列よりも長いとみなされます。たとえば、<literal>bb*</literal>は<literal>abbbc</literal>の真ん中の3文字と一致します。<literal>(wee|week)(knights|nights)</literal>は<literal>weeknights</literal>の10文字すべてと一致します。しかし、<literal>(.*).*</literal>が<literal>abc</literal>と一致しないとき、かっこで囲まれた指定部分文字列は3つすべての文字と一致し、また、<literal>(a*)*</literal>が<literal>bc</literal>と一致しない場合はREのすべてとかっこで囲まれた指定部分文字列はNULL文字と一致します。
   </para>

   <para>
    <!--If case-independent matching is specified, the effect is much as
    if all case distinctions had vanished from the alphabet.

  When an
    alphabetic that exists in multiple cases appears as an ordinary
    character outside a bracket expression, it is effectively
    transformed into a bracket expression containing both cases,
    e.g. <literal>x</literal> becomes <literal>[xX]</literal>.

  When
    it appears inside a bracket expression, all case counterparts of
    it are added to the bracket expression, so that (e.g.)
    <literal>[x]</literal> becomes <literal>[xX]</literal> and
    <literal>[^x]</literal> becomes <literal>[^xX]</literal>.-->

    大文字/小文字に依存しないマッチが指定された場合は、アルファベットから大文字/小文字の区別がまったく消え去ったのと同じ効果になります。大文字/小文字の両方があるアルファベットで、ブラケット表現外では通常の文字として扱われる文字に関しては、<literal>x</literal>が<literal>[xX]</literal>になるように、大文字/小文字の両方を持ったブラケット表現に変換されます。もし、ブラケット表現内に文字がある場合、<literal>[x]</literal>は<literal>[xX]</literal>、<literal>[^x]</literal>は<literal>[^xX]</literal>といったように、ブラケット表現にはすべての対の文字が追加されます。

   </para>

   <para>
    <!--There is no particular limit on the length of REs, except insofar
    as memory is limited.  Memory usage is approximately linear in RE
    size, and largely insensitive to RE complexity, except for bounded
    repetitions.  Bounded repetitions are implemented by macro
    expansion, which is costly in time and space if counts are large
    or bounded repetitions are nested.  An RE like, say,
    <literal>((((a{1,100}){1,100}){1,100}){1,100}){1,100}</literal>
    will (eventually) run almost any existing machine out of swap
    space.<footnote><para>This was written in 1994, mind you.  The
    numbers have probably changed, but the problem
    persists.-->

    REにはメモリが足りているのであれば、特に長さ制限はありません。メモリの使用はおおよそREのサイズの線形（linear）で、バウンド反復（bounded repetition）以外はREの複雑さに関係がありません。バウンド反復とはマクロ拡張で実装されていて、バウンド反復が入れ子になっていたりカウントが大きければメモリ量と時間を大きく取ってしまいます。たとえば、<literal>((((a{1,100}){1,100}){1,100}){1,100}){1,100}</literal>は（結局は）存在するほとんどのマシンのスワップ領域からはみ出します<footnote><para>これは1994年に書かれたものです。数値は変更しているかも知れませんが、問題は存続しているでしょう。</para></footnote>。
   </para>
<!-- end re_format.7 man page -->
  </sect2>

 </sect1>


  <sect1 id="functions-formatting">
   <!--<title>Formatting Functions</title>-->
   <title>フォーマット関数</title>
<indexterm><primary sortas="ふぉーまっとかんすう">フォーマット関数</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="ふぉーまっとかんすう">フォーマット関数</secondary></indexterm>
   <note>
    <title><!--Author-->著者</title>
    <para>
     <!--Written by Karel Zak (<email>zakkr@zf.jcu.cz</email>) on 2000-01-24-->
     2000-01-24にKarel Zak（<email>zakkr@zf.jcu.cz</email>）によって書かれました。
    </para>
   </note>

   <para>
    <!--The <productname>Postgres</productname> formatting functions
    provide a powerful set of tools for converting various data types
    (date/time, integer, floating point, numeric) to formatted strings
    and for converting from formatted strings to specific data types.
    These functions all follow a common calling convention: the first
    argument is the value to be formatted and the second argument is a
    template that defines the output or input format.-->

    <productname>Postgres</productname>のフォーマット関数は、あらゆるデータ型（date/time、integer、floating point、numeric）をフォーマットされた文字列に変換したり、フォーマットされた文字列から特定のデータ型に変換できる、強力なツールです。これらの関数はすべて共通の呼び出し規約に従います。最初の引数はフォーマットされる値で、2つ目の引数は出力または入力のフォーマットを定義するテンプレートです。
   </para>

    <table tocentry="1">
     <!--<title>Formatting Functions</title>-->
     <title>フォーマット関数</title>
     <tgroup cols="4">
      <thead>
       <row>
	<entry><!--Function-->関数</entry>
	<entry><!--Returns-->返り値</entry>
	<entry><!--Description-->説明</entry>
	<entry><!--Example-->例</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>to_char(timestamp, text)<indexterm><primary>to_char()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>to_char()</secondary></indexterm></entry>
	<entry>text</entry>
	<entry><!--convert timestamp to string-->timestampをstringに変換</entry>
	<entry>to_char(timestamp 'now','HH12:MI:SS')</entry>
       </row>

       <row>
	<entry>to_char(int, text)<indexterm><primary>to_char()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>to_char()</secondary></indexterm></entry>
	<entry>text</entry>
	<entry><!--convert int4/int8 to string-->int4/int8をstringに変換</entry>
	<entry>to_char(125, '999')</entry>
       </row>

       <row>
	<entry>to_char(double precision, text)<indexterm><primary>to_char()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>to_char()</secondary></indexterm></entry>
	<entry>text</entry>
	<entry><!--convert real/double precision to string-->real/double precisionをstringに変換</entry>
	<entry>to_char(125.8, '999D9')</entry>
       </row>

       <row>
	<entry>to_char(numeric, text)<indexterm><primary>to_char()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>to_char()</secondary></indexterm></entry>
	<entry>text</entry>
	<entry><!--convert numeric to string-->numericをstringに変換</entry>
	<entry>to_char(numeric '-125.8', '999D99S')</entry>
       </row>

       <row>
	<entry>to_date(text, text)<indexterm><primary>to_date()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>to_date()</secondary></indexterm></entry>
	<entry>date</entry>
	<entry><!--convert string to date-->stringをdateに変換</entry>
	<entry>to_date('05 Dec 2000', 'DD Mon YYYY')</entry>
       </row>

       <row>
	<entry>to_timestamp(text, text)<indexterm><primary>to_timestamp()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>to_timestamp()</secondary></indexterm></entry>
	<entry>timestamp</entry>
	<entry><!--convert string to timestamp-->stringをtimestampに変換</entry>
	<entry>to_timestamp('05 Dec 2000', 'DD Mon YYYY')</entry>
       </row>

       <row>
	<entry>to_number(text, text)<indexterm><primary>to_number()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>to_number()</secondary></indexterm></entry>
	<entry>numeric</entry>
	<entry><!--convert string to numeric-->stringをnumericに変換</entry>
	<entry>to_number('12,454.8-', '99G999D9S')</entry>
       </row>
      </tbody>
     </tgroup>
    </table>

   <para>
    <!--In an output template string, there are certain patterns that are
    recognized and replaced with appropriately-formatted data from the value
    to be formatted.  Any text that is not a template pattern is simply
    copied verbatim.  Similarly, in an input template string template patterns
    identify the parts of the input data string to be looked at and the
    values to be found there.-->

    出力のテンプレート文字列には、ある一定のパターンがあり、それが認識され、フォーマットする値の大まかにフォーマットされたもので上書きします。テンプレートのパターンでないあらゆるテキストはそのままコピーされます。同様に、入力テンプレート文字列のテンプレートパターンは入力されたデータの文字列の部分を確かめ、そこにあるべき値を識別します。
   </para>

    <table tocentry="1">
     <!--<title>Template patterns for date/time conversions</title>-->
     <title>日付/時刻変換のテンプレートパターン</title><indexterm><primary sortas="ひづけじかんへんかんのてんぷれーとぱたーん">日付/時刻変換のテンプレートパターン</primary></indexterm>
     <tgroup cols="2">
      <thead>
       <row>
	<entry><!--Pattern-->パターン</entry>
	<entry><!--Description-->説明</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>HH</entry>
	<entry><!--hour of day-->時（01-12）</entry>
       </row>
       <row>
	<entry>HH12</entry>
	<entry><!--hour of day-->時（01-12）</entry>
       </row>       
       <row>
	<entry>HH24</entry>
	<entry><!--hour of day-->時（00-23）</entry>
       </row>       
       <row>
	<entry>MI</entry>
	<entry><!--minute-->分（00-59）</entry>
       </row>   
       <row>
	<entry>SS</entry>
	<entry><!--second-->秒（00-59）</entry>
       </row>
       <row>
	<entry>SSSS</entry>
	<entry><!--seconds past midnight-->深夜0時からの秒数（0-86,399）</entry>
       </row>
       <row>
	<entry>AM、A.M.、PM、P.M.</entry>
	<entry><!--meridian indicator (upper case)-->午前/午後指定（大文字）</entry>
       </row>
       <row>
	<entry>am、a.m.、pm、p.m.</entry>
	<entry><!--meridian indicator (lower case)-->午前/午後指定（小文字）</entry>
       </row>
       <row>
	<entry>Y,YYY</entry>
	<entry><!--year (4 and more digits) with comma-->カンマ付き年（4桁以上）</entry>
       </row>
       <row>
	<entry>YYYY</entry>
	<entry><!--year (4 and more digits)-->年（4桁以上）</entry>
       </row>
       <row>
	<entry>YYY</entry>
	<entry><!--last 3 digits of year-->年の最後の3桁</entry>
       </row>
       <row>
	<entry>YY</entry>
	<entry><!--last 2 digits of year-->年の最後の2桁</entry>
       </row>
       <row>
	<entry>Y</entry>
	<entry><!--last digit of year-->年の最後の桁</entry>
       </row>
       <row>
	<entry>BC、B.C.、AD、A.D.</entry>
	<entry><!--year indicator (upper case)-->紀元前/紀元指定（大文字）</entry>
       </row>
       <row>
	<entry>bc、b.c.、ad、a.d.</entry>
	<entry><!--year indicator (lower case)-->紀元前/紀元指定（小文字）</entry>
       </row>
       <row>
	<entry>MONTH</entry>
	<entry><!--full upper case month name (blank-padded to 9 chars)-->すべて大文字の月名（9文字になるようにスペースが入ります）</entry>
       </row>
       <row>
	<entry>Month</entry>
	<entry><!--full mixed case month name (blank-padded to 9 chars)-->大文字/小文字の混じった月名（9文字になるようにスペースが入ります）</entry>
       </row>
       <row>
	<entry>month</entry>
	<entry><!--full lower case month name (blank-padded to 9 chars)-->すべて小文字の月名（9文字になるようにスペースが入ります）</entry>
       </row>
       <row>
	<entry>MON</entry>
	<entry><!--abbreviated upper case month name (3 chars)-->短縮された大文字の月名（3文字）</entry>
       </row>
       <row>
	<entry>Mon</entry>
	<entry><!--abbreviated mixed case month name (3 chars)-->短縮された大文字/小文字の月（3文字）</entry>
       </row>
       <row>
	<entry>mon</entry>
	<entry><!--abbreviated lower case month name (3 chars)-->短縮された小文字の月名（3文字）</entry>
       </row>
       <row>
	<entry>MM</entry>
	<entry><!--month number-->月の数（01-12）</entry>
       </row>
       <row>
	<entry>DAY</entry>
	<entry><!--full upper case day name (blank-padded to 9 chars)-->すべて大文字の曜日（9文字になるようにスペースが入ります）</entry>
       </row>
       <row>
	<entry>Day</entry>
	<entry><!--full mixed case day name (blank-padded to 9 chars)-->大文字/小文字の曜日（9文字になるようにスペースが入ります）</entry>
       </row>
       <row>
	<entry>day</entry>
	<entry><!--full lower case day name (blank-padded to 9 chars)-->すべて小文字の曜日（9文字になるようにスペースが入ります）</entry>
       </row>
       <row>
	<entry>DY</entry>
	<entry><!--abbreviated upper case day name (3 chars)-->すべて大文字の短縮された曜日（3文字）</entry>
       </row>
       <row>
	<entry>Dy</entry>
	<entry><!--abbreviated mixed case day name (3 chars)-->短縮された大文字/小文字の曜日（3文字）</entry>
       </row>
       <row>
	<entry>dy</entry>
	<entry><!--abbreviated lower case day name (3 chars)-->短縮された小文字の曜日（3文字）</entry>
       </row>
       <row>
	<entry>DDD</entry>
	<entry><!--day of year-->1年間内の通算の日にち（001-366）</entry>
       </row>
       <row>
	<entry>DD</entry>
	<entry><!--day of month-->月内の日にち（01-31）</entry>
       </row>
       <row>
	<entry>D</entry>
	<entry><!--day of week (1-7; SUN=1)-->曜日（1-7、日曜日=1）</entry>
       </row>
       <row>
	<entry>W</entry>
	<entry><!--week of month (1-5) where first week start on the first day of the month-->月の週（1-5）、月の初日がある週が第1週</entry>
       </row> 
       <row>
	<entry>WW</entry>
	<entry><!--week number of year (1-53) where first week start on the first day of the year-->年通算の週（1-53）、年の初日がある週が第1週</entry>
       </row>
       <row>
	<entry>IW</entry>
	<entry><!--ISO week number of year (The first Thursday of the new year is in week 1.)-->ISO形式の年通算の週、年最初の木曜日がある週が第1週</entry>
       </row>
       <row>
	<entry>CC</entry>
	<entry><!--century (2 digits)-->世紀（2桁）</entry>
       </row>
       <row>
	<entry>J</entry>
	<entry><!--Julian Day (days since January 1, 4712 BC)-->ユリウス暦（紀元前4712年1月1日からの経過日）</entry>
       </row>
       <row>
	<entry>Q</entry>
	<entry><!--quarter-->四半期</entry>
       </row>
       <row>
	<entry>RM</entry>
	<entry><!--month in Roman Numerals (I-XII; I=January) - upper case-->大文字のローマ数字の月（I-XII、I=1月）</entry>
       </row>
       <row>
	<entry>rm</entry>
	<entry><!--month in Roman Numerals (I-XII; I=January) - lower case-->小文字のローマ数字の月（I-XII、I=1月）</entry>
       </row>
       <row>
	<entry>TZ</entry>
	<entry><!--timezone name - upper case-->大文字のタイムゾーン名</entry>
       </row>
       <row>
	<entry>tz</entry>
	<entry><!--timezone name - lower case-->小文字のタイムゾーン名</entry>
       </row>
      </tbody>
     </tgroup>
    </table>

   <para>
    <!--Certain modifiers may be applied to any template pattern to alter its
    behavior.  For example, <quote><literal>FMMonth</literal></quote>
    is the <quote><literal>Month</literal></quote> pattern with the
    <quote><literal>FM</literal></quote> prefix.-->

    すべてのテンプレートパターンには、その動作を変更するために、添字を伴うことが可能です。たとえば、<quote><literal>FMMonth</literal></quote>は、<quote><literal>Month</literal></quote>と修正子<quote><literal>FM</literal></quote>が一緒になったものです。
   </para>

    <table tocentry="1">
     <!--<title>Template pattern modifiers for date/time conversions</title>-->
     <title>日付/時刻変換のテンプレートパターン添字</title><indexterm><primary sortas="ひづけじかんへんかんのてんぷれーとぱたーんそえじ">日付/時刻変換のテンプレートパターン添字</primary></indexterm>
     <tgroup cols="3">
      <thead>
       <row>
	<entry><!--Modifier-->添字</entry>
	<entry><!--Description-->説明</entry>
	<entry><!--Example-->例</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry><literal>FM</literal><!--prefix-->接頭辞</entry>
	<entry><!--fill mode (suppress padding blanks and zeroes)-->字詰めモード（スペース/0を挿入するのを無効にする）</entry>
	<entry>FMMonth</entry>
       </row>
       <row>
	<entry><literal>TH</literal><!--suffix-->接尾語</entry>
	<entry><!--add upper-case ordinal number suffix-->大文字の序数を追加</entry>
	<entry>DDTH</entry>
       </row>	
       <row>
	<entry><literal>th</literal><!--suffix-->接尾語</entry>
	<entry><!--add lower-case ordinal number suffix-->小文字の序数を追加</entry>
	<entry>DDth</entry>
       </row>
       <row>
	<entry><literal>FX</literal><!--prefix-->接頭語</entry>
	<entry><!--FiXed format global option (see below)-->FX（固定長形式）テンプレート全体のスイッチ（下記参照）</entry>
	<entry>FX Month DD Day</entry>
       </row>	
       <row>
	<entry><literal>SP</literal><!--suffix-->接尾語</entry>
	<entry><!--spell mode (not yet implemented)-->スペルモード（まだ実装されていません）</entry>
	<entry>DDSP</entry>
       </row>       
      </tbody>
     </tgroup>
    </table>

   <para>
    <!--Usage notes:-->
    使用上の注意を以下に示します。</para>


    <itemizedlist>
     <listitem>
      <para>
       <!--<literal>FM</literal> suppresses leading zeroes or trailing blanks
       that would otherwise be added to make the output of a pattern be
       fixed-width.-->

       <literal>FM</literal>は、一定の長さにするために付いている余分な0やスペースを自動的に挿入する機能を無効にするものです。
       
      </para>
     </listitem>

     <listitem>
      <para>
       <!--<function>to_timestamp</function> and <function>to_date</function>
       skip multiple blank spaces in the input string if the <literal>FX</literal> option 
       is not used. <literal>FX</literal> must be specified as the first item
       in the template; for example 
       <literal>to_timestamp('2000    JUN','YYYY MON')</literal> is right, but
       <literal>to_timestamp('2000    JUN','FXYYYY MON')</literal> returns an error,
       because <function>to_timestamp</function> expects one blank space only.-->

       <function>to_timestamp</function>と<function>to_date</function>で<literal>FX</literal>オプションが指定されていない場合は、入力された文字のスペースを無視してしまいます。<literal>FX</literal>は、必ずテンプレートの始めに記述されている必要があります。たとえば、<function>to_timestamp</function>は1つのスペースがあることになっているので、<literal>to_timestamp('2000    JUN','YYYY MON')</literal>は正しいのですが、<literal>to_timestamp('2000    JUN','FXYYYY MON')</literal>ではエラーとなってしまいます。
      </para>
     </listitem>

     <listitem>
      <para>
       <!--If a backslash (<quote><literal>&bsol;</literal></quote>) is desired
       in a string constant, a double backslash
       (<quote><literal>&bsol;&bsol;</literal></quote>) must be entered; for
       example <literal>'&bsol;&bsol;HH&bsol;&bsol;MI&bsol;&bsol;SS'</literal>.  This is true for
       any string constant in <productname>Postgres</productname>.-->

       文字列の中に<quote><literal>&bsol;</literal></quote>を含めたい場合は、<literal>'&bsol;&bsol;HH&bsol;&bsol;MI&bsol;&bsol;SS'</literal>のように、必ず2つ重ねて使う必要があります。これは<productname>Postgres</productname>で文字列を扱う場合には共通していえることです。
      </para>
     </listitem>

     <listitem>
      <para>
       <!--Ordinary text is allowed in <function>to_char</function>
       templates and will be output literally.  You can put a substring
       in double quotes to force it to be interpreted as literal text
       even if it contains pattern keywords.  For example, in
       <literal>'"Hello Year: "YYYY'</literal>, the <literal>YYYY</literal>
       will be replaced by year data, but the single <literal>Y</literal>
       will not be.-->

       通常のテキストを<function>to_char</function>のテンプレートで使用することができ、そのまま出力されます。パターンキーワードを含んでいる場合でも、部分文字列を2重引用符内に記述し、強制的にテキストとして認識させることができます。たとえば、<literal>'"Hello Year: "YYYY'</literal>では、<literal>YYYY</literal>は年データで置き換えられますが、1つの<literal>Y</literal>では置き換わりません。
      </para>
     </listitem>

     <listitem>
      <para>
       <!--If you want to
       have a double quote in the output you must precede it with a
       backslash, for example <literal>'&bsol;&bsol;"YYYY Month&bsol;&bsol;"'</literal>. -->

      出力結果に2重引用符を付けたい場合、<literal>'&bsol;&bsol;"YYYY Month&bsol;&bsol;"'</literal>のように、その前に必ずバックスラッシュを記述する必要があります。
      </para>

     </listitem>

     <listitem>
      <para>
       <!--<literal>YYYY</literal> conversion from string to timestamp or
       date is restricted if you use a year with more than 4 digits. You must
       use some non-digit character or template after <literal>YYYY</literal>,
       otherwise the year is always interpreted as 4 digits. For example
       (with year 20000):
       <literal>to_date('200001131', 'YYYYMMDD')</literal> will be 
       interpreted as a 4-digit year; better is to use a non-digit 
       separator after the year, like
       <literal>to_date('20000-1131', 'YYYY-MMDD')</literal> or
       <literal>to_date('20000Nov31', 'YYYYMonDD')</literal>.-->

       <literal>YYYY</literal>変換で、文字列をtimestampやdateにするときに、4桁以上の数字が使用されている場合には制約があります。<literal>YYYY</literal>の後に、数字以外の文字やテンプレートを置く必要があります。それを行わなければ、4桁の年と解釈されてしまいます。たとえば、20000年を扱う場合、<literal>to_date('200001131', 'YYYYMMDD')</literal>は4桁の年と解釈されてしまいます。年の後に数字でない区切りをおいた方がよいでしょう<literal>to_date('20000-1131', 'YYYY-MMDD')</literal>、または<literal>to_date('20000Nov31', 'YYYYMonDD')</literal>ならば5桁の年と解釈されます。
      </para>
     </listitem>
    </itemizedlist>

    <table tocentry="1">
     <!--<title>Template patterns for numeric conversions</title>-->
     <title>数値（numeric）変換のテンプレート</title><indexterm><primary sortas="すうちへんかんのてんぷれーと">数値変換のテンプレート</primary></indexterm>
     <tgroup cols="2">
      <thead>
       <row>
	<entry><!--Pattern-->パターン</entry>
	<entry><!--Description-->説明</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>9</entry>
	<entry><!--value with the specified number of digits-->指定した桁数の数字</entry>
       </row>
       <row>
	<entry>0</entry>
	<entry><!--value with leading zeros-->一定の長さにするために付けられる0</entry>
       </row>
       <row>
	<entry>.（<!--period-->ピリオド）</entry>
	<entry><!--decimal point-->小数点</entry>
       </row>       
       <row>
	<entry>,（<!--comma-->カンマ）</entry>
	<entry><!--group (thousand) separator-->3桁ごとのセパレータ</entry>
       </row>
       <row>
	<entry>PR</entry>
	<entry><!--negative value in angle brackets-->角かっこ内に負の値を出力</entry>
       </row>
       <row>
	<entry>S</entry>
	<entry><!--negative value with minus sign (uses locale)-->負の値は符号付きで出力（ロケールを使用します）</entry>
       </row>
       <row>
	<entry>L</entry>
	<entry><!--currency symbol (uses locale)-->通貨記号（ロケールを使用します）</entry>
       </row>
       <row>
	<entry>D</entry>
	<entry><!--decimal point (uses locale)-->小数点（ロケールを使用します）</entry>
       </row>
       <row>
	<entry>G</entry>
	<entry><!--group separator (uses locale)-->グループのセパレータ（ロケールを使用します）</entry>
       </row>
       <row>
	<entry>MI</entry>
	<entry><!--minus sign in specified position (if number < 0)-->数字が0より小さい場合、指定された場所にマイナスの符号</entry>
       </row>
       <row>
	<entry>PL</entry>
	<entry><!--plus sign in specified position (if number > 0)-->数字が0より大きい場合、指定された場所にプラスの符号</entry>
       </row>
       <row>
	<entry>SG</entry>
	<entry><!--plus/minus sign in specified position-->指定された場所に符号</entry>
       </row>
       <row>
	<entry>RN</entry>
	<entry><!--roman numeral (input between 1 and 3999)-->ローマ数字（入力可能値は1から3,999）<footnote><para>訳注：7.1では動作が不安定となっています。本家ですでにバグ報告されています。</para></footnote></entry>
       </row>
       <row>
	<entry>TH or th</entry>
	<entry><!--convert to ordinal number-->数字を序数に変換</entry>
       </row>
       <row>
	<entry>V</entry>
	<entry><!--shift <replaceable>n</replaceable> digits (see notes)--><replaceable>n</replaceable>桁シフト（後述）</entry>
       </row>
       <row>
	<entry>EEEE</entry>
	<entry><!--scientific numbers (not supported yet)-->科学技術計算用数値（まだサポートされていません）</entry>
       </row>
      </tbody>
     </tgroup>
    </table>

   <para>
    <!--Usage notes:-->
    使用上の注意を以下に示します。</para>

    <itemizedlist>
     <listitem>
      <para>
       <!--A sign formatted using 'SG', 'PL' or 'MI' is not an anchor in
       the number; for example,
       to_char(-12, 'S9999') produces <literal>'  -12'</literal>,
       but to_char(-12, 'MI9999') produces <literal>'-  12'</literal>.
       The Oracle implementation does not allow the use of
       <literal>MI</literal> ahead of <literal>9</literal>, but rather
       requires that <literal>9</literal> precede
       <literal>MI</literal>.-->

       'SG'、'PL'、'MI'で出力した符号は数字には反映されていません。たとえば、to_char(-12, 'S9999')は<literal>'  -12'</literal>となりますが、to_char(-12, 'MI9999')は<literal>'-  12'</literal>となってしまいます。Oracleでは<literal>9</literal>の前に<literal>MI</literal>を置けません。必ず<literal>9</literal>の後に<literal>MI</literal>を置く必要があります。
      </para>
     </listitem>

     <listitem>
      <para>
       <!--<literal>9</literal> specifies a value with the same number of 
       digits as there are <literal>9</literal>s. If a digit is
       not available use blank space.-->
 
       <literal>9</literal>は同じ桁数の数字を意味します。数字でない場合はスペースになります。
      </para>
     </listitem>

     <listitem>
      <para>
       <!--<literal>TH</literal> does not convert values less than zero
       and does not convert decimal numbers.-->

       <literal>TH</literal>は0以下の値と小数は変換しません。
      </para>
     </listitem>

     <listitem>
      <para>
       <!--<literal>PL</literal>, <literal>SG</literal>, and
       <literal>TH</literal> are <productname>Postgres</productname>
       extensions. -->

       <literal>PL</literal>、<literal>SG</literal>、
       <literal>TH</literal>は<productname>Postgres</productname>の拡張です。
      </para>
     </listitem>

     <listitem>
      <para>
       <!--<literal>V</literal> effectively
       multiplies the input values by
       <literal>10^<replaceable>n</replaceable></literal>, where
       <replaceable>n</replaceable> is the number of digits following
       <literal>V</literal>. 
       <function>to_char</function> does not support the use of
       <literal>V</literal> combined with a decimal point.
       (E.g., <literal>99.9V99</literal> is not allowed.)-->

       <literal>V</literal>は効率よく入力値を<literal>10^<replaceable>n</replaceable></literal>倍します。<replaceable>n</replaceable>は<literal>V</literal>の後に来る数字です。<literal>V</literal>には小数点付き値の数値は使用できません。なお、<function>to_char</function>では、<literal>V</literal>と小数点を同時には（たとえば<literal>99.9V99</literal>のようには）使用できません。
      </para>
     </listitem>
    </itemizedlist>

    <table tocentry="1">
     <!--<title><function>to_char</function> Examples</title>-->
     <title><function>to_char</function>使用例</title>
     <tgroup cols="2">
      <thead>
       <row>
	<entry><!--Input-->入力</entry>
	<entry><!--Output-->出力</entry>
       </row>
      </thead>
      <tbody>
       <row>
        <entry>to_char(now(),'Day, DD  HH12:MI:SS')</entry>
        <entry><literal>'Tuesday  , 06  05:39:18'</literal></entry>
       </row>
       <row>
        <entry>to_char(now(),'FMDay, FMDD  HH12:MI:SS')</entry>
        <entry><literal>'Tuesday, 6  05:39:18'</literal></entry>
       </row>
       <row>
        <entry>to_char(-0.1,'99.99')</entry>
        <entry><literal>' -.10'</literal></entry>
       </row>
       <row>
        <entry>to_char(-0.1,'FM9.99')</entry>
        <entry><literal>'-.1'</literal></entry>
       </row>
       <row>
        <entry>to_char(0.1,'0.9')</entry>
        <entry><literal>' 0.1'</literal></entry>
       </row>
       <row>
        <entry>to_char(12,'9990999.9')</entry>
        <entry><literal>'    0012.0'</literal></entry>
       </row>
       <row>
        <entry>to_char(12,'FM9990999.9')</entry>
        <entry><literal>'0012'</literal></entry>
       </row>
       <row>
        <entry>to_char(485,'999')</entry>
        <entry><literal>' 485'</literal></entry>
       </row>
       <row>
        <entry>to_char(-485,'999')</entry>
        <entry><literal>'-485'</literal></entry>
       </row>
       <row>
        <entry>to_char(485,'9 9 9')</entry>
        <entry><literal>' 4 8 5'</literal></entry>
       </row>
       <row>
        <entry>to_char(1485,'9,999')</entry>
        <entry><literal>' 1,485'</literal></entry>
       </row>
       <row>
        <entry>to_char(1485,'9G999')</entry>
        <entry><literal>' 1 485'</literal></entry>
       </row>
       <row>
        <entry>to_char(148.5,'999.999')</entry>
        <entry><literal>' 148.500'</literal></entry>
       </row>
       <row>
        <entry>to_char(148.5,'999D999')</entry>
        <entry><literal>' 148,500'</literal></entry>	 
       </row>
       <row>
        <entry>to_char(3148.5,'9G999D999')</entry>
        <entry><literal>' 3 148,500'</literal></entry>
       </row>
       <row>
        <entry>to_char(-485,'999S')</entry>
        <entry><literal>'485-'</literal></entry>
       </row>
       <row>		
        <entry>to_char(-485,'999MI')</entry>
        <entry><literal>'485-'</literal></entry>	
       </row>
       <row>
        <entry>to_char(485,'999MI')</entry>
        <entry><literal>'485'</literal></entry>		
       </row>
       <row>
        <entry>to_char(485,'PL999')</entry>
        <entry><literal>'+485'</literal></entry>	
       </row>
       <row>		
        <entry>to_char(485,'SG999')</entry>
        <entry><literal>'+485'</literal></entry>	
       </row>
       <row>
        <entry>to_char(-485,'SG999')</entry>
        <entry><literal>'-485'</literal></entry>	
       </row>
       <row>
        <entry>to_char(-485,'9SG99')</entry>
        <entry><literal>'4-85'</literal></entry>	
       </row>
       <row>
        <entry>to_char(-485,'999PR')</entry>
        <entry><literal>'&lt;485&gt;'</literal></entry>		
       </row>
       <row>
        <entry>to_char(485,'L999')</entry>
        <entry><literal>'DM 485</literal></entry>	 
       </row>
       <row>
        <entry>to_char(485,'RN')</entry>		
        <entry><literal>'        CDLXXXV'</literal></entry>
       </row>
       <row>
        <entry>to_char(485,'FMRN')</entry>	
        <entry><literal>'CDLXXXV'</literal></entry>
       </row>
       <row>
        <entry>to_char(5.2,'FMRN')</entry>
        <entry><literal>V</literal></entry>		
       </row>
       <row>
        <entry>to_char(482,'999th')</entry>
        <entry><literal>' 482nd'</literal></entry>				
       </row>
       <row>
        <entry>to_char(485, '"Good number:"999')</entry>
        <entry><literal>'Good number: 485'</literal></entry>
       </row>
       <row>
        <entry>to_char(485.8,'"Pre-decimal:"999" Post-decimal:" .999')</entry>
        <entry><literal>'Pre-decimal: 485 Post-decimal: .800'</literal></entry>
       </row>
       <row>
        <entry>to_char(12,'99V999')</entry>		
        <entry><literal>' 12000'</literal></entry>
       </row>
       <row>
        <entry>to_char(12.4,'99V999')</entry>
        <entry><literal>' 12400'</literal></entry>
       </row>
       <row>		
        <entry>to_char(12.45, '99V9')</entry>
        <entry><literal>' 125'</literal></entry>
       </row>
      </tbody>
     </tgroup>
    </table>
  </sect1>


  <sect1 id="functions-datetime">
   <!--<title>Date/Time Functions</title>-->
   <title>日付/時刻関数</title>

   <para>
    <!--<xref linkend="functions-datetime-table"> shows the available
    functions for date/time value processing.  The basic arithmetic
    operators (<literal>+</literal>, <literal>*</literal>, etc.) are
    also available.  For formatting functions, refer to <xref
    linkend="functions-formatting">.  You should be familiar with the
    background information on date/time data types (see <xref
    linkend="datatype-datetime">).-->

    <xref linkend="functions-datetime-table">ではdate/time値で使用できる関数が書かれています。基本算術演算子（<literal>+</literal>、<literal>*</literal>など）も使用することができます。フォーマット関数に関しては<xref linkend="functions-formatting">を参照してください。また、date/time型に関しては<xref linkend="datatype-datetime">を参照してください。
   </para>

    <table id="functions-datetime-table">
     <!--<title>Date/Time Functions</title>-->
     <title>日付/時刻関数</title>
     <tgroup cols="4">
      <thead>
       <row>
	<entry><!--Name-->名前</entry>
	<entry><!--Return Type-->返り値</entry>
	<entry><!--Description-->説明</entry>
	<entry><!--Example-->例</entry>
	<entry><!--Result-->結果</entry>
       </row>
      </thead>

      <tbody>
<![IGNORE[
<!--
These two functions don't seem to do what it says here, or anything
reasonable at all for that matter.
-->
       <row>
	<entry>age(timestamp)<indexterm><primary>age()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>age()</secondary></indexterm></entry>
	<entry>interval</entry>
	<entry>Subtract argument from current date, preserve years and months and days</entry>
	<entry>age(timestamp '1957-06-13')</entry>
	<entry>43 years 8 mons 3 days</entry>
       </row>

       <row>
	<entry>age(timestamp, timestamp)<indexterm><primary>age()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>age()</secondary></indexterm></entry>
	<entry>interval</entry>
	<entry>preserve months and years</entry>
	<entry>age('now', timestamp '1957-06-13')</entry>
	<entry></entry>
       </row>
]]>

       <row>
	<entry>current_date()<indexterm><primary>current_date()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>current_date()</secondary></indexterm></entry>
	<entry>date</entry>
	<entry>	 <!--returns current date; see also <link
	 linkend="functions-datetime-current">below</link>-->

          現在の日付を返す。<link linkend="functions-datetime-current">下記</link>を参照
	</entry>
	<entry></entry>
	<entry></entry>
       </row>

       <row>
	<entry>current_time()<indexterm><primary>current_time()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>current_time()</secondary></indexterm></entry>
	<entry>time</entry>
	<entry>	 <!--returns current time (of day); see also <link
	 linkend="functions-datetime-current">below</link>-->

         現在の時刻を返す。<link linkend="functions-datetime-current">下記</link>を参照
	</entry>
	<entry></entry>
	<entry></entry>
       </row>

       <row>
	<entry>current_timestamp()<indexterm><primary>current_timestamp()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>current_timestamp()</secondary></indexterm></entry>
	<entry>timestamp</entry>
	<entry>	 <!--returns current date and time; see also <link
	 linkend="functions-datetime-current">below</link>-->

         現在の日付と時間を返す。<link linkend="functions-datetime-current">下記</link>を参照
	</entry>
	<entry></entry>
	<entry></entry>
       </row>

       <row>
	<entry>date_part(text, timestamp)<indexterm><primary>date_part()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>date_part()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry>	 <!--extract subfield from date/time value (equivalent to
	 <function>extract</function>); see also <link
	 linkend="functions-datetime-datepart">below</link>-->

         date/time値からサブフィールドを取り出す（<function>extract</function>関数と同義。<link linkend="functions-datetime-datepart">下記</link>も参照）
        </entry>
	<entry>date_part('hour', timestamp '2001-02-16 20:38:40')</entry>
	<entry>20</entry>
       </row>

       <row>
	<entry>date_part(text, interval)<indexterm><primary>date_part()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>date_part()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry><!--extract subfield from interval value (equivalent to
	 <function>extract</function>); see also <link
	 linkend="functions-datetime-datepart">below</link>-->

         interval値からサブフィールドを取り出す（<function>extract</function>と同義。<link linkend="functions-datetime-datepart">下記</link>も参照）
          
        </entry>
	<entry>date_part('month', interval '2 years 3 months')</entry>
	<entry>3</entry>
       </row>

       <row>
	<entry>date_trunc(text, timestamp)<indexterm><primary>date_trunc()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>date_trunc()</secondary></indexterm></entry>
	<entry>timestamp</entry>
	<entry><!--truncate date to specified precision; see also <link
         linkend="functions-datetime-trunc">below</link>-->

          dateを指定された精度に切り捨てる。<link linkend="functions-datetime-trunc">以下</link>も参照
        </entry>
	<entry>date_trunc('hour', timestamp '2001-02-16 20:38:40')</entry>
	<entry>2001-02-16 20:00:00+00</entry>
       </row>

       <row>
	<entry>extract<!--(identifier from timestamp)-->(timestampからの識別子)<indexterm><primary>extract()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>extract()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry><!--extract subfield from date/time value; see also <link
         linkend="functions-datetime-extract">below</link>-->

          date/time値からサブフィールドを取り出す（<link linkend="functions-datetime-extract">下記</link>も参照）
        </entry>
	<entry>extract(hour from timestamp '2001-02-16 20:38:40')</entry>
	<entry>20</entry>
       </row>

       <row>
	<entry>extract<!--(identifier from interval)-->(intervalからの識別子)<indexterm><primary>extract()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>extract()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry>	 <!--extract subfield from interval value; see also <link
         linkend="functions-datetime-extract">below</link>-->

         interval値からサブフィールドを取り出す（<link linkend="functions-datetime-extract">下記</link>も参照）
        </entry>
	<entry>extract(month from interval '2 years 3 months')</entry>
	<entry>3</entry>
       </row>

       <row>
	<entry>isfinite(timestamp)<indexterm><primary>isfinite()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>isfinite()</secondary></indexterm></entry>
	<entry>boolean</entry>
	<entry><!--Returns true if the time stamp is finite (neither invalid nor infinity)-->
               timestampが有限（無効でも無限でもない）であれば真を返す
        </entry>
	<entry>isfinite(timestamp '2001-02-16 21:28:30')</entry>
	<entry>true</entry>
       </row>

       <row>
	<entry>isfinite(interval)<indexterm><primary>isfinite()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>isfinite()</secondary></indexterm></entry>
	<entry>boolean</entry>
	<entry><!--Returns true if the interval is finite in length-->
               intervalの長さが有限であれば真を返す</entry>
	<entry>isfinite(interval '4 hours')</entry>
	<entry>true</entry>
       </row>

       <row>
	<entry>now()<indexterm><primary>isfinite()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>isfinite()</secondary></indexterm></entry>
	<entry>timestamp</entry>
	<entry>	 <!--returns current date and time (equivalent to
	 <function>current_timestamp</function>); see also <link
	 linkend="functions-datetime-current">below</link>-->

          現在の日付と時間を返す（<function>current_timestamp</function>と同義。<link linkend="functions-datetime-current">下記</link>も参照）。
	</entry>
	<entry></entry>
	<entry></entry>
       </row>

       <row>
	<entry>timeofday()<indexterm><primary>timeofday()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>timeofday()</secondary></indexterm></entry>
	<entry>text</entry>
	<entry><!--returns high-precision date and time; see also <link
	 linkend="functions-datetime-current">below</link>-->高精度の日付と時間を返す。<link linkend="functions-datetime-current">下記</link>を参照
	</entry>
	<entry>timeofday()</entry>
	<entry>Wed Feb 21 17:01:13.000126 2001 EST</entry>
       </row>

       <row>
	<entry>timestamp(date)<indexterm><primary>timestamp()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>timestamp()</secondary></indexterm></entry>
	<entry>timestamp</entry>
	<entry><!--convert date to timestamp-->dateをtimestampに変換</entry>
	<entry>timestamp(date '2000-12-25')</entry>
	<entry>2000-12-25 00:00:00+09</entry>
       </row>

       <row>
	<entry>timestamp(date, time)<indexterm><primary>timestamp()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>timestamp()</secondary></indexterm></entry>
	<entry>timestamp</entry>
	<entry><!--combine date and time into a timestamp-->dateとtimeを結合させてtimestampにする</entry>
	<entry>timestamp(date '1998-02-24',time '23:07')</entry>
	<entry>1998-02-24 23:07:00+09</entry>
       </row>
      </tbody>
     </tgroup>
    </table>


  <sect2 id="functions-datetime-extract">
   <title><function>EXTRACT</function>、<function>date_part</function></title>
<indexterm><primary>EXTRACT</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>EXTRACT</secondary></indexterm><indexterm><primary>date_part</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>date_part</secondary></indexterm>
<synopsis>
EXTRACT (<replaceable>field</replaceable> FROM <replaceable>source</replaceable>)
</synopsis>

   <para>
    <!--The <function>extract</function> function retrieves sub-fields
    from date/time values, such as year or hour.
    <replaceable>source</replaceable> is a value expression that
    evaluates to type <type>timestamp</type> or <type>interval</type>.
    (Expressions of type <type>date</type> or <type>time</type> will
    be cast to <type>timestamp</type> and can therefore be used as
    well.)  <replaceable>field</replaceable> is an identifier (not a
    string!) that selects what field to extract from the source value.
    The <function>extract</function> function returns values of type
    <type>double precision</type>.-->

    <function>extract</function>関数は、date/time値から年や時間などのサブフィールドを抽出します。<replaceable>source</replaceable>とは、<type>timestamp</type>型や<type>interval</type>型に評価する値式です（<type>date</type>型、または<type>time</type>型の式は<type>timestamp</type>型にキャストされるので、これらも使用できます）。<replaceable>field</replaceable>は、識別子（文字列ではありません）で、source値（source value）からどのフィールドを抽出するかを選択します。<function>extract</function>関数の返り値は<type>double precision</type>です。</para>


    <!--The following are valid values:-->
<para>
有効な値を以下に示します。
</para>

    <!-- alphabetical -->
    <variablelist>
     <varlistentry>
      <term>century（世紀）</term>
      <listitem>
       <para>
        <!--The year field divided by 100-->年フィールドを100で割ったもの。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>20</computeroutput>
</screen>
       </informalexample>

       <para>
        <!--Note that this is not really the century that the date is in.-->
        実際に、入力された日付の世紀ではないことに注意してください。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>day（日付）</term>
      <listitem>
       <para>
        <!--The day (of the month) field (1 - 31)-->
        月の日付（1〜31）
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>16</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>decade（10年）</term>
      <listitem>
       <para>
        <!--The year field divided by 10-->年フィールドを10で割ったもの。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>200</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>dow（曜日）</term>
      <listitem>
       <para>
        <!--The day of the week (0 - 6; Sunday is 0) (for
        <type>timestamp</type> values only)-->
        曜日（0〜6、0が日曜日、<type>timestamp</type>型のみで使用可）。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>5</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>doy（年通算日数）</term>
      <listitem>
       <para>
        <!--The day of the year (1 - 365/366) 
        (for <type>timestamp</type> values only)-->
        年の通算日数（1〜365/366）（<type>timestamp</type>型のみ使用可）。
       </para>
       <informalexample>
<screen>
SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>47</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>epoch</term>
      <listitem>
       <para>
        <!--For <type>date</type> and <type>timestamp</type> values, the
        number of seconds since 1970-01-01 00:00:00 (Result may be
        negative.); for <type>interval</type> values, the total number
        of seconds in the interval-->

        <type>date</type>型と<type>timestamp</type>型の値において、1970-01-01 00:00:00からの秒数を返します（負の数の場合もあり）。<type>interval</type>型ではインターバルの秒の合計を返します。

       </para>

       <informalexample>
<screen>
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>982352320</computeroutput>

SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>442800</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>hour（時）</term>
      <listitem>
       <para>
        <!--The hour field (0 - 23)-->時（0〜23）。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>20</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>microseconds（マイクロ秒）</term>
      <listitem>
       <para>
        <!--The seconds field, including fractional parts, multiplied by 1
        000 000.  Note that this includes full seconds.-->

        分数部分も含めた、1,000,000を掛けた秒フィールド。秒すべてを返すことに注意してください。
        
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>28500000</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>millennium（千年期）</term>
      <listitem>
       <para>
        <!--The year field divided by 1000-->
        年フィールドを1,000で割ったもの。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>2</computeroutput>
</screen>
       </informalexample>

       <para>
        <!--Note that this is not really the millennium that the date is in.-->
        実際に、入力された日付の千年期ではないことに注意してください。
       </para>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>milliseconds（ミリ秒）</term>
      <listitem>
       <para>
        <!--The seconds field, including fractional parts, multiplied by
        1000.  Note that this includes full seconds.-->
        分数部分も含めた、1,000をかけた秒フィールド。秒すべてを返すことに注意してください。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>28500</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>minute（分）</term>
      <listitem>
       <para>
        <!--The minutes field (0 - 59)-->分（0〜59）。
         
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>38</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>month（月）</term>
      <listitem>
       <para>
        <!--For <type>timestamp</type> values, the number of the month
        within the year (1 - 12) ; for <type>interval</type> values
        the number of months, modulo 12 (0 - 11)-->

       <type>timestamp</type>型では月（1〜12）を返し、<type>interval</type>型では月の数（0〜11、モジュロ12）を返します。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>2</computeroutput>

SELECT EXTRACT(MONTH FROM INTERVAL '2 years 3 months');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>3</computeroutput>

SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>1</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>quarter（四半期）</term>
      <listitem>
       <para>
        <!--The quarter of the year (1 - 4) that the day is in (for
        <type>timestamp</type> values only)-->
        指定された日付がある四半期（1〜4、<type>timestamp</type>型のみ使用可）。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>1</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>second（秒）</term>
      <listitem>
       <para>
        <!--The seconds field, including fractional parts (0 -
        59<footnote><simpara>60 if leap seconds are
        implemented by the operating system</simpara></footnote>)-->
        分数部分も含めた、秒を返します（0〜59）<footnote><simpara>オペレーティングシステムでうるう秒が実装されている場合は0〜60になります。</simpara></footnote>。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(SECOND FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>40</computeroutput>

SELECT EXTRACT(SECOND FROM TIME '17:12:28.5');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>28.5</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>week（週）</term>
      <listitem>
       <para>
        <!--From a <type>timestamp</type> value, calculate the number of
        the week of the year that the day is in.  By definition
        (<acronym>ISO</acronym> 8601), the first week of a year
        contains January 4 of that year.  (The <acronym>ISO</acronym>
        week starts on Monday.)  In other words, the first Thursday of
        a year is in week 1 of that year.-->

        <type>timestamp</type>型の値により、その日付の年通算の週を計算します。<acronym>ISO</acronym> 8601では、その年の1月4日がある週を第1週とします。<acronym>ISO</acronym>では、週は月曜日から始まるとしています。つまり、年の最初の木曜日がある週がその年の第1週となります。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>7</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

     <varlistentry>
      <term>year（年）</term>
      <listitem>
       <para>
        <!--The year field-->年を返します。
       </para>

       <informalexample>
<screen>
SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>2001</computeroutput>
</screen>
       </informalexample>
      </listitem>
     </varlistentry>

<!--
tz
tz_hour
tz_minute
-->

    </variablelist>


   <para>
    <!--The <function>extract</function> function is primarily intended
    for computational processing.  For formatting date/time values for
    display, see <xref linkend="functions-formatting">.-->

    <function>extract</function>関数は、計算処理のためのものでした。日付/時刻の値を表示用にフォーマットするには<xref linkend="functions-formatting">を参照してください。
    
   </para>

   <anchor id="functions-datetime-datepart">
   <para>
    <!--The <function>date_part</function> function is the traditional
    <productname>Postgres</productname> equivalent to the
    <acronym>SQL</acronym>-function <function>extract</function>:-->

    <function>date_part</function>関数は、<productname>Postgres</productname>伝来のもので、<acronym>SQL</acronym>関数の<function>extract</function>と同義です。</para>


<synopsis>
date_part('<replaceable>field</replaceable>', <replaceable>source</replaceable>)
</synopsis>

<para>
    <!--Note that here the <replaceable>field</replaceable> value needs to
    be a string.  The valid field values for
    <function>date_part</function> are the same as for
    <function>extract</function>.-->

    ここでは、<replaceable>field</replaceable>の値は文字列でなければいけないことに注意してください。<function>date_part</function>関数の有効フィールドは<function>extract</function>関数と同じです。
   </para>

   <informalexample>
<screen>
SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>16</computeroutput>

SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>4</computeroutput>
</screen>
   </informalexample>

  </sect2>

  <sect2 id="functions-datetime-trunc">
   <title><function>date_trunc</function></title>
<indexterm><primary>date_trunc()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>date_trunc()</secondary></indexterm>
   <para>
    <!--The function <function>date_trunc</function> is conceptually
    similar to the <function>trunc</function> function for numbers.-->
    <function>date_trunc</function>関数は、数の<function>trunc</function>関数と概念的には似ているものです。
   </para>

<synopsis>
date_trunc('<replaceable>field</replaceable>', <replaceable>source</replaceable>)
</synopsis>

<para>
    <!--<replaceable>source</replaceable> is a value expression of type
    <type>timestamp</type> (values of type <type>date</type> and
    <type>time</type> are cast automatically).
    <replaceable>field</replaceable> selects to which precision to
    truncate the time stamp value.  The return value is of type
    <type>timestamp</type> with all fields that are less than the
    selected one set to zero (or one, for day and month).-->

    <replaceable>source</replaceable>は<type>timestamp</type>型（<type>date</type>型と<type>time</type>型は自動的にキャストされます）の値式です。<replaceable>field</replaceable>はtimestampの値をどの精度で切り詰めるかを選択します。返り値は<type>timestamp</type>型で、選択されたものより小さいフィールドはすべて0（月と日の場合は1）に設定されます。
   
   </para>

   <para>
    <!--Valid values for <replaceable>field</replaceable> are:-->
    有効な<replaceable>field</replaceable>の値は下記のとおりです。</para>


    <simplelist>
     <member>microseconds（マイクロ秒）</member>
     <member>milliseconds（ミリ秒）</member>
     <member>second（秒）</member>
     <member>minute（分）</member>
     <member>hour（時）</member>
     <member>day（日）</member>
     <member>month（月）</member>
     <member>year（年）</member>
     <member>decade（10年）</member>
     <member>century（世紀）</member>
     <member>millennium（千年期）</member>
    </simplelist>

   <informalexample>
<screen>
SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>2001-02-16 20:00:00+00</computeroutput>

SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
<lineannotation><!--Result:-->結果：</lineannotation><computeroutput>2001-01-01 00:00:00+00</computeroutput>
</screen>
   </informalexample>
  </sect2>

  <sect2 id="functions-datetime-current">
   <!--<title>Current Date/Time</title>-->
   <title>現在の日付/時刻</title>
<indexterm><primary sortas="かんすう">関数</primary><secondary sortas="げんざいのひづけじこく">現在の</secondary></indexterm>
   <para>
    <!--The following functions are available to obtain the current date and/or
    time:-->

    以下の関数は、現在の日付または時間を取得するための関数です。
</para>

<synopsis>
CURRENT_TIME
CURRENT_DATE
CURRENT_TIMESTAMP
</synopsis>

    <!--Note that because of the requirements of the
    <acronym>SQL</acronym> standard, these functions must not be
    called with trailing parentheses.-->

<para>
    標準<acronym>SQL</acronym>の条件として、これらの関数はかっこを付けずに呼び出さなければいけないことに注意してください。
   </para>

   <informalexample>
<screen>
SELECT CURRENT_TIME;
<computeroutput>19:07:32</computeroutput>

SELECT CURRENT_DATE;
<computeroutput>2001-02-17</computeroutput>

SELECT CURRENT_TIMESTAMP;
<computeroutput>2001-02-17 19:07:32-05</computeroutput>
</screen>
   </informalexample>

   <para>
    <!--The function <function>now()</function> is the traditional
    <productname>Postgres</productname> equivalent to
    <function>CURRENT_TIMESTAMP</function>.-->

    <function>now()</function>関数は、<productname>Postgres</productname>伝来のもので、<function>CURRENT_TIMESTAMP</function>と同義です。
   </para>

   <para>
    <!--There is also <function>timeofday()</function>, which returns current
    time to higher precision than the <function>CURRENT_TIMESTAMP</function>
    family does:-->

    <function>timeofday()</function>関数は、現在の時間を<function>CURRENT_TIMESTAMP</function>関数群よりも高い精度で返します。
   </para>

   <informalexample>
<screen>
SELECT timeofday();
 Sat Feb 17 19:07:32.000126 2001 EST
</screen>
   </informalexample>

   <para>
    <!--<function>timeofday()</function> uses the operating system call
    <function>gettimeofday(2)</function>, which may have resolution as
    good as microseconds (depending on your platform); the other functions
    rely on <function>time(2)</function> which is restricted to one-second
    resolution.  For historical reasons, <function>timeofday()</function>
    returns its result as a text string rather than a timestamp value.-->

    <function>timeofday()</function>関数は、オペレーティングシステムの呼び出し<function>gettimeofday(2)</function>を使用し、プラットフォームにもよりますが、マイクロ秒までの結果を取り出すことができます。その他の関数は<function>time(2)</function>に依存し、秒単位の結果を返します。歴史的背景により、<function>timeofday()</function>関数は、timestamp型の値ではなく文字列で結果を返します。
   </para>

   <para>
    <!--It is quite important to realize that
    <function>CURRENT_TIMESTAMP</function> and related functions all return
    the time as of the start of the current transaction; their values do not
    increment while a transaction is running.  But
    <function>timeofday()</function> returns the actual current time.-->

    <function>CURRENT_TIMESTAMP</function>と、その他の関連する関数すべては、現在のトランザクションが開始された時間を返すことに注意してください。また、それらの値はトランザクションが実行されている間に増加しません。しかし、<function>timeofday()</function>は実際の現在時間を返します。
   </para>

   <para>
    <!--All the date/time datatypes also accept the special literal value
    <literal>now</> to specify the current date and time.  Thus,
    the following three all return the same result:-->

    すべての日付/時刻データ型は<literal>now</>という、現在の日付と時間を特定する、特殊な定数を認識します。したがって、下記の3つの実行結果はすべて同じものとなります。</para>

<programlisting>
SELECT CURRENT_TIMESTAMP;
SELECT now();
SELECT TIMESTAMP 'now';
</programlisting>

    <note>
     <para>
      <!--You do not want to use the third form when specifying a DEFAULT
      value while creating a table.  The system will convert <literal>now</>
      to a timestamp as soon as the constant is parsed, so that when
      the default value is needed,
      the time of the table creation would be used!  The first two
      forms will not be evaluated until the default value is used,
      because they are function calls.  Thus they will give the desired
      behavior of defaulting to the time of row insertion.-->

      テーブルを作成するときに、デフォルト値を特定する際には上記の3つ目の形では指定しないでください。定数が解釈されたときにシステムが<literal>now</>をtimestampに変換するので、もしデフォルト値が必要な場合はテーブルが作成された時刻が使われます。最初の2つのフォームは関数呼び出しなので、デフォルト値が使用されるまで評価されません。したがって、これらの関数は、列の値の挿入時に要求どおりのデフォルト設定を行います。
     </para>
    </note>
  </sect2>
 </sect1>

  
 <sect1 id="functions-geometry">
   <!--<title>Geometric Functions and Operators</title>-->
   <title>幾何関数と演算子</title>
<indexterm><primary sortas="かんすう">関数</primary><secondary sortas="きか">幾何</secondary></indexterm>
<indexterm><primary sortas="えんざんし">演算子</primary><secondary sortas="きか">幾何</secondary></indexterm>
   <para>
    <!--The geometric types point, box, lseg, line, path, polygon, and
    circle have a large set of native support functions and operators.-->

   point、box、lseg、line、path、polygon、circleなどの幾何型には多くの関数と演算子があります。
   </para>

   <table>
     <!--<TITLE>Geometric Operators</TITLE>-->
     <TITLE>幾何演算子</TITLE>
     <TGROUP COLS="3">
      <THEAD>
       <ROW>
	<ENTRY><!--Operator-->演算子</ENTRY>
	<ENTRY><!--Description-->説明</ENTRY>
	<ENTRY><!--Usage-->使用方法</ENTRY>
       </ROW>
      </THEAD>
      <TBODY>
       <ROW>
	<ENTRY>+ <indexterm><primary>+</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>+</secondary></indexterm></ENTRY>
	<ENTRY><!--Translation-->平行移動</ENTRY>
	<ENTRY>box '((0,0),(1,1))' + point '(2.0,0)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>- <indexterm><primary>-</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>-</secondary></indexterm></ENTRY>
	<ENTRY><!--Translation-->平行移動</ENTRY>
	<ENTRY>box '((0,0),(1,1))' - point '(2.0,0)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>* <indexterm><primary>*</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>*</secondary></indexterm></ENTRY>
	<ENTRY><!--Scaling/rotation-->拡大縮小/回転</ENTRY>
	<ENTRY>box '((0,0),(1,1))' * point '(2.0,0)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>/ <indexterm><primary>/</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>/</secondary></indexterm></ENTRY>
	<ENTRY><!--Scaling/rotation-->拡大縮小/回転</ENTRY>
	<ENTRY>box '((0,0),(2,2))' / point '(2.0,0)'</ENTRY>
       </ROW>
       <ROW>
	<ENTRY># <indexterm><primary>#</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>#</secondary></indexterm></ENTRY>
	<ENTRY><!--Intersection-->交わり</ENTRY>
	<ENTRY>box '((1,-1),(-1,1))' # '((1,1),(-1,-1))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY># <indexterm><primary>#</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>#</secondary></indexterm></ENTRY>
	<ENTRY><!--Number of points in polygon-->多角形内の点の数</ENTRY>
	<ENTRY># polygon'((1,0),(0,1),(-1,0))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>## <indexterm><primary>##</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>##</secondary></indexterm></ENTRY>
	<ENTRY><!--Point of closest proximity-->最も近接した点</ENTRY>
	<ENTRY>point '(0,0)' ## lseg '((2,0),(0,2))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&amp;&amp; <indexterm><primary>&amp;&amp;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&amp;&amp;</secondary></indexterm></ENTRY>
	<ENTRY><!--Overlaps?-->重なるか否か</ENTRY>
	<ENTRY>box '((0,0),(1,1))' &amp;&amp; box '((0,0),(2,2))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&amp;&lt; <indexterm><primary>&amp;&lt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&amp;&lt;</secondary></indexterm></ENTRY>
	<ENTRY><!--Overlaps to left?-->左重なりか否か</ENTRY>
	<ENTRY>box '((0,0),(1,1))' &amp;&lt; box '((0,0),(2,2))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&amp;&gt; <indexterm><primary>&amp;&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&amp;&gt;</secondary></indexterm></ENTRY>
	<ENTRY><!--Overlaps to right?-->右重なりか否か</ENTRY>
	<ENTRY>box '((0,0),(3,3))' &amp;&gt; box '((0,0),(2,2))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&lt;-&gt; <indexterm><primary>&lt;-&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;-&gt;</secondary></indexterm></ENTRY>
	<ENTRY><!--Distance between-->距離</ENTRY>
	<ENTRY>circle '((0,0),1)' &lt;-&gt; circle '((5,0),1)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&lt;&lt; <indexterm><primary>&lt;&lt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;&lt;</secondary></indexterm></ENTRY>
	<ENTRY><!--Left of?-->左か否か</ENTRY>
	<ENTRY>circle '((0,0),1)' &lt;&lt; circle '((5,0),1)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&lt;^ <indexterm><primary>&lt;^</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;^</secondary></indexterm></ENTRY>
	<ENTRY><!--Is below?-->下か否か</ENTRY>
	<ENTRY>circle '((0,0),1)' &lt;^ circle '((0,5),1)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&gt;&gt; <indexterm><primary>&gt;&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;&gt;</secondary></indexterm></ENTRY>
	<ENTRY><!--Is right of?-->右か否か</ENTRY>
	<ENTRY>circle '((5,0),1)' &gt;&gt; circle '((0,0),1)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&gt;^ <indexterm><primary>&gt;^</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;^</secondary></indexterm></ENTRY>
	<ENTRY><!--Is above?-->上か否か</ENTRY>
	<ENTRY>circle '((0,5),1)' >^ circle '((0,0),1)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>?# <indexterm><primary>?#</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>?#</secondary></indexterm></ENTRY>
	<ENTRY><!--Intersects or overlaps-->交わり、または重なり</ENTRY>
	<ENTRY>lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>?- <indexterm><primary>?-</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>?-</secondary></indexterm></ENTRY>
	<ENTRY><!--Is horizontal?-->水平か否か</ENTRY>
	<ENTRY>point '(1,0)' ?- point '(0,0)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>?-| <indexterm><primary>?-|</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>?-|</secondary></indexterm></ENTRY>
	<ENTRY><!--Is perpendicular?-->直交しているか否か</ENTRY>
	<ENTRY>lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>@-@  <indexterm><primary>@-@</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>@-@</secondary></indexterm></ENTRY>
	<ENTRY><!--Length or circumference-->長さ、または円周</ENTRY>
	<ENTRY>@-@ path '((0,0),(1,0))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>?| <indexterm><primary>?|</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>?|</secondary></indexterm></ENTRY>
	<ENTRY><!--Is vertical?-->垂直か否か</ENTRY>
	<ENTRY>point '(0,1)' ?| point '(0,0)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>?|| <indexterm><primary>?||</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>?||</secondary></indexterm></ENTRY>
	<ENTRY><!--Is parallel?-->平行か否か</ENTRY>
	<ENTRY>lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>@ <indexterm><primary>@</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>@</secondary></indexterm></ENTRY>
	<ENTRY><!--Contained or on-->含まれている</ENTRY>
	<ENTRY>point '(1,1)' @ circle '((0,0),2)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>@@ <indexterm><primary>@@</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>@@</secondary></indexterm></ENTRY>
	<ENTRY><!--Center of-->中心</ENTRY>
	<ENTRY>@@ circle '((0,0),10)'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>~= <indexterm><primary>~=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>~=</secondary></indexterm></ENTRY>
	<ENTRY><!--Same as-->等しい</ENTRY>
	<ENTRY>polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'</ENTRY>
       </ROW>
      </TBODY>
     </TGROUP>
   </TABLE>

   <table>
     <!--<title>Geometric Functions</title>-->
     <title>幾何関数</title>
     <tgroup cols="4">
      <thead>
       <row>
	<entry><!--Function-->関数</entry>
	<entry><!--Returns-->返り値</entry>
	<entry><!--Description-->説明</entry>
	<entry><!--Example-->例</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>area(object)<indexterm><primary>area()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>area()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry><!--area of item-->面積</entry>
	<entry>area(box '((0,0),(1,1))')</entry>
       </row>

       <row>
	<entry>box(box, box)<indexterm><primary>box()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>box()</secondary></indexterm></entry>
	<entry>box</entry>
	<entry><!--intersection box-->長方形の交わり</entry>
	<entry>box(box '((0,0),(1,1))',box '((0.5,0.5),(2,2))')</entry>
       </row>

       <row>
	<entry>center(object)<indexterm><primary>center()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>center()</secondary></indexterm></entry>
	<entry>point</entry>
	<entry><!--center of item-->中心</entry>
	<entry>center(box '((0,0),(1,2))')</entry>
       </row>

       <row>
	<entry>diameter(circle)<indexterm><primary>diameter()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>diameter()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry><!--diameter of circle-->直径</entry>
	<entry>diameter(circle '((0,0),2.0)')</entry>
       </row>

       <row>
	<entry>height(box)<indexterm><primary>height()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>height()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry><!--vertical size of box-->長方形の高さ</entry>
	<entry>height(box '((0,0),(1,1))')</entry>
       </row>

       <row>
	<entry>isclosed(path)<indexterm><primary>isclosed()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>isclosed()</secondary></indexterm></entry>
	<entry>boolean</entry>
	<entry><!--a closed path?-->閉じたパスか否か</entry>
	<entry>isclosed(path '((0,0),(1,1),(2,0))')</entry>
       </row>

       <row>
	<entry>isopen(path)<indexterm><primary>isopen()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>isopen()</secondary></indexterm></entry>
	<entry>boolean</entry>
	<entry><!--an open path?-->開いたパスか否か</entry>
	<entry>isopen(path '[(0,0),(1,1),(2,0)]')</entry>
       </row>

       <row>
	<entry>length(object)<indexterm><primary>length()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>length()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry><!--length of item-->長さ</entry>
	<entry>length(path '((-1,0),(1,0))')</entry>
       </row>

       <row>
	<entry>pclose(path)<indexterm><primary>pclose()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>pclose()</secondary></indexterm></entry>
	<entry>path</entry>
	<entry><!--convert path to closed-->閉じたパスに変換</entry>
	<entry>popen(path '[(0,0),(1,1),(2,0)]')</entry>
       </row>
<!--
Not defined by this name. Implements the intersection operator '#'
       <row>
	<entry>point(lseg,lseg)</entry>
	<entry>point</entry>
	<entry>intersection</entry>
	<entry>point(lseg '((-1,0),(1,0))',lseg '((-2,-2),(2,2))')</entry>
       </row>
-->
       <row>
	<entry>npoint(path)<indexterm><primary>npoint()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>npoint()</secondary></indexterm></entry>
	<entry>int4</entry>
	<entry><!--number of points-->点の数</entry>
	<entry>npoints(path '[(0,0),(1,1),(2,0)]')</entry>
       </row>

       <row>
	<entry>popen(path)<indexterm><primary>popen()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>popen()</secondary></indexterm></entry>
	<entry>path</entry>
	<entry><!--convert path to open path-->開いたパスに変換</entry>
	<entry>popen(path '((0,0),(1,1),(2,0))')</entry>
       </row>

       <row>
	<entry>radius(circle)<indexterm><primary>radius()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>radius()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry><!--radius of circle-->半径</entry>
	<entry>radius(circle '((0,0),2.0)')</entry>
       </row>

       <row>
	<entry>width(box)<indexterm><primary>width()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>width()</secondary></indexterm></entry>
	<entry>double precision</entry>
	<entry><!--horizontal size-->幅</entry>
	<entry>width(box '((0,0),(1,1))')</entry>
       </row>
      </tbody>
     </tgroup>
   </table>


   <table>
     <!--<title>Geometric Type Conversion Functions</title>-->
     <title>幾何型変換関数</title>
     <tgroup cols="4">
      <thead>
       <row>
	<entry><!--Function-->関数</entry>
	<entry><!--Returns-->返り値</entry>
	<entry><!--Description-->説明</entry>
	<entry><!--Example-->例</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>circle)<indexterm><primary>box()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>box()</secondary></indexterm></entry>
	<entry>box</entry>
	<entry><!--circle to box-->円を長方形に変換</entry>
	<entry>box(circle '((0,0),2.0)')</entry>
       </row>

       <row>
	<entry>box(point, point)<indexterm><primary>box()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>box()</secondary></indexterm></entry>
	<entry>box</entry>
	<entry><!--points to box-->点を長方形に変換</entry>
	<entry>box(point '(0,0)', point '(1,1)')</entry>
       </row>

       <row>
	<entry>box(polygon)<indexterm><primary>box()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>box()</secondary></indexterm></entry>
	<entry>box</entry>
	<entry><!--polygon to box-->多角形を長方形に変換</entry>
	<entry>box(polygon '((0,0),(1,1),(2,0))')</entry>
       </row>

       <row>
	<entry>circle(box)<indexterm><primary>circle()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>circle()</secondary></indexterm></entry>
	<entry>circle</entry>
	<entry><!--to circle-->円に変換</entry>
	<entry>circle(box '((0,0),(1,1))')</entry>
       </row>

       <row>
	<entry>circle(point, double precision)<indexterm><primary>circle()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>circle()</secondary></indexterm></entry>
	<entry>circle</entry>
	<entry><!--point to circle-->点を円に変換</entry>
	<entry>circle(point '(0,0)', 2.0)</entry>
       </row>

       <row>
	<entry>lseg(box)<indexterm><primary>lseg()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>lseg()</secondary></indexterm></entry>
	<entry>lseg</entry>
	<entry><!--box diagonal to lseg-->長方形の対角線を線分に変換</entry>
	<entry>lseg(box '((-1,0),(1,0))')</entry>
       </row>

       <row>
	<entry>lseg(point, point)<indexterm><primary>lseg()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>lseg()</secondary></indexterm></entry>
	<entry>lseg</entry>
	<entry><!--points to lseg-->点を線分に変換</entry>
	<entry>lseg(point '(-1,0)', point '(1,0)')</entry>
       </row>

       <row>
	<entry>path(polygon)<indexterm><primary>path()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>path()</secondary></indexterm></entry>
	<entry>point</entry>
	<entry><!--polygon to path-->多角形をパスに変換</entry>
	<entry>path(polygon '((0,0),(1,1),(2,0))')</entry>
       </row>

       <row>
	<entry>point(circle)<indexterm><primary>point()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>point()</secondary></indexterm></entry>
	<entry>point</entry>
	<entry><!--center-->円の中心</entry>
	<entry>point(circle '((0,0),2.0)')</entry>
       </row>

       <row>
	<entry>point(polygon)<indexterm><primary>point()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>point()</secondary></indexterm></entry>
	<entry>point</entry>
	<entry><!--center-->多角形の中心</entry>
	<entry>point(polygon '((0,0),(1,1),(2,0))')</entry>
       </row>

       <row>
	<entry>polygon(box)<indexterm><primary>polygon()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>polygon()</secondary></indexterm></entry>
	<entry>polygon</entry>
	<entry><!--12 point polygon-->12点の多角形</entry>
	<entry>polygon(box '((0,0),(1,1))')</entry>
       </row>

       <row>
	<entry>polygon(circle)<indexterm><primary>polygon()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>polygon()</secondary></indexterm></entry>
	<entry>polygon</entry>
	<entry><!--12-point polygon-->12点の多角形</entry>
	<entry>polygon(circle '((0,0),2.0)')</entry>
       </row>

       <row>
	<entry>polygon(<replaceable class="parameter">npts</replaceable>, circle)<indexterm><primary>polygon()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>polygon()</secondary></indexterm></entry>
	<entry>polygon</entry>
	<entry><replaceable class="parameter">npts</replaceable><!-- polygon-->多角形</entry>
	<entry>polygon(12, circle '((0,0),2.0)')</entry>
       </row>

       <row>
	<entry>polygon(path)<indexterm><primary>polygon()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>polygon()</secondary></indexterm></entry>
	<entry>polygon</entry>
	<entry><!--path to polygon-->パスを多角形に変換</entry>
	<entry>polygon(path '((0,0),(1,1),(2,0))')</entry>
       </row>
      </tbody>
     </tgroup>
   </table>

  </sect1>


  <sect1 id="functions-net">
   <!--<title>Network Address Type Functions</title>-->
   <title>ネットワークアドレス型関数</title>


    <table tocentry="1" id="cidr-inet-operators-table">
     <!--<title><type>cidr</> and <type>inet</> Operators</title>-->
     <title><type>cidr</>と<type>inet</>演算子</title>
     <TGROUP COLS="3">
      <THEAD>
       <ROW>
	<ENTRY><!--Operator-->演算子</ENTRY>
	<ENTRY><!--Description-->説明</ENTRY>
	<ENTRY><!--Usage-->使用方法</ENTRY>
       </ROW>
      </THEAD>
      <TBODY>
       <ROW>
	<ENTRY>&lt; <indexterm><primary>&lt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;</secondary></indexterm></ENTRY>
	<ENTRY><!--Less than-->小さい</ENTRY>
	<ENTRY>inet '192.168.1.5' &lt; inet '192.168.1.6'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&lt;= <indexterm><primary>&lt;=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;=</secondary></indexterm></ENTRY>
	<ENTRY><!--Less than or equal-->小さいまたは等しい</ENTRY>
	<ENTRY>inet '192.168.1.5' &lt;= inet '192.168.1.5'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>= <indexterm><primary>=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>=</secondary></indexterm></ENTRY>
	<ENTRY><!--Equals-->等しい</ENTRY>
	<ENTRY>inet '192.168.1.5' = inet '192.168.1.5'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&gt;= <indexterm><primary>&gt;=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;=</secondary></indexterm></ENTRY>
	<ENTRY><!--Greater or equal-->大きいまたは等しい</ENTRY>
	<ENTRY>inet '192.168.1.5' &gt;= inet '192.168.1.5'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&gt; <indexterm><primary>&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;</secondary></indexterm></ENTRY>
	<ENTRY><!--Greater-->大きい</ENTRY>
	<ENTRY>inet '192.168.1.5' &gt; inet '192.168.1.4'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&lt;&gt; <indexterm><primary>&lt;&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;&gt;</secondary></indexterm></ENTRY>
	<ENTRY><!--Not equal-->等しくない</ENTRY>
	<ENTRY>inet '192.168.1.5' &lt;&gt; inet '192.168.1.4'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&lt;&lt; <indexterm><primary>&lt;&lt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;&lt;</secondary></indexterm></ENTRY>
	<ENTRY><!--is contained within-->その内に含まれている</ENTRY>
	<ENTRY>inet '192.168.1.5' &lt;&lt; inet '192.168.1/24'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&lt;&lt;= <indexterm><primary>&lt;&lt;=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&lt;&lt;=</secondary></indexterm></ENTRY>
	<ENTRY><!--is contained within or equals-->含まれているまたは等しい</ENTRY>
	<ENTRY>inet '192.168.1/24' &lt;&lt;= inet '192.168.1/24'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&gt;&gt; <indexterm><primary>&gt;&gt;</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;&gt;</secondary></indexterm></ENTRY>
	<ENTRY><!--contains-->含む</ENTRY>
	<ENTRY>inet'192.168.1/24' &gt;&gt; inet '192.168.1.5'</ENTRY>
       </ROW>

       <ROW>
	<ENTRY>&gt;&gt;= <indexterm><primary>&gt;&gt;=</primary></indexterm><indexterm><primary sortas="えんざんし">演算子</primary><secondary>&gt;&gt;=</secondary></indexterm></ENTRY>
	<ENTRY><!--contains or equals-->含むまたは等しい</ENTRY>
	<ENTRY>inet '192.168.1/24' &gt;&gt;= inet '192.168.1/24'</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>&lt;&lt;</>, <literal>&lt;&lt;=</>,
     <literal>&gt;&gt;</>, <literal>&gt;&gt;=</>
     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.-->

     <type>inet</type>型に使用できる演算子すべては<type>cidr</type>型にも使用することができます。<literal>&lt;&lt;</>、<literal>&lt;&lt;=</>、<literal>&gt;&gt;</>、<literal>&gt;&gt;=</>の演算子はサブネットに含まれているかを調べる演算子です。それらは、2つのアドレスのホストの部分は無視し、ネットワークの部分のみを使用し、一方のネットワーク部が他方のサブネットになっているかを検査します。
    </para>


    <table tocentry="1" id="cidr-inet-functions">
     <!--<title><type>cidr</> and <type>inet</> Functions</title>-->
     <title><type>cidr</>と<type>inet</>関数</title>
     <tgroup cols="5">
      <thead>
       <row>
	<entry><!--Function-->関数</entry>
	<entry><!--Returns-->返り値</entry>
	<entry><!--Description-->説明</entry>
	<entry><!--Example-->例</entry>
	<entry><!--Result-->結果</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>broadcast(inet)<indexterm><primary>broadcast()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>broadcast()</secondary></indexterm></entry>
	<entry>inet</entry>
	<entry><!--broadcast address for network-->ネットワークのブロードキャストアドレス</entry>
	<entry>broadcast('192.168.1.5/24')</entry>
	<entry>192.168.1.255/24</entry>
       </row>

       <row>
	<entry>host(inet)<indexterm><primary>host()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>host()</secondary></indexterm></entry>
	<entry>text</entry>
	<entry><!--extract IP address as text-->IPアドレスを文字列で抽出する</entry>
	<entry>host('192.168.1.5/24')</entry>
	<entry>192.168.1.5</entry>
       </row>

       <row>
	<entry>masklen(inet)<indexterm><primary>masklen()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>masklen()</secondary></indexterm></entry>
	<entry>integer</entry>
	<entry><!--extract netmask length-->ネットマスクの長さを抽出する</entry>
	<entry>masklen('192.168.1.5/24')</entry>
	<entry>24</entry>
       </row>

       <row>
	<entry>netmask(inet)<indexterm><primary>netmask()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>netmask()</secondary></indexterm></entry>
	<entry>inet</entry>
	<entry><!--construct netmask for network-->ネットマスクを作成する</entry>
	<entry>netmask('192.168.1.5/24')</entry>
	<entry>255.255.255.0</entry>
       </row>

       <row>
	<entry>network(inet)<indexterm><primary>network()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>network()</secondary></indexterm></entry>
	<entry>cidr</entry>
	<entry><!--extract network part of address-->アドレスからネットワーク部分を抽出する</entry>
	<entry>network('192.168.1.5/24')</entry>
	<entry>192.168.1.0/24</entry>
       </row>

       <row>
	<entry>text(inet)<indexterm><primary>text()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>text()</secondary></indexterm></entry>
	<entry>text</entry>
	<entry><!--extract IP address and masklen as text-->IPアドレスとマスクの長さを文字列として抽出する</entry>
	<entry>text(inet '192.168.1.5')</entry>
	<entry>192.168.1.5/32</entry>
       </row>

       <row>
	<entry>abbrev(inet)<indexterm><primary>abbrev()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>abbrev()</secondary></indexterm></entry>
	<entry>text</entry>
	<entry><!--extract abbreviated display as text-->省略形表示を文字列として抽出する</entry>
	<entry>abbrev(cidr '10.1.0.0/16')</entry>
	<entry>10.1/16</entry>
       </row>
      </tbody>
     </tgroup>
    </table>

   <para>
    <!--All of the functions for <type>inet</type> can be applied to
    <type>cidr</type> values as well.  The <function>host</>(),
    <function>text</>(), and <function>abbrev</>() functions are primarily
    intended to offer alternative display formats.-->
    
     <type>inet</type>型に使用できる関数すべては<type>cidr</type>型にも使用することができます。<function>host</>()、<function>text</>()、<function>abbrev</>()の関数は別の表示形式を提供するための関数です。
    
   </para>

    <table tocentry="1" id="macaddr-functions">
     <!--<title><type>macaddr</> Functions</title>-->
     <title><type>macaddr</>関数</title>
     <tgroup cols="5">
      <thead>
       <row>
	<entry><!--Function-->関数</entry>
	<entry><!--Returns-->返り値</entry>
	<entry><!--Description-->説明</entry>
	<entry><!--Example-->例</entry>
	<entry><!--Result-->結果</entry>
       </row>
      </thead>
      <tbody>
       <row>
	<entry>trunc(macaddr)<indexterm><primary>trunc()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>trunc()</secondary></indexterm></entry>
	<entry>macaddr</entry>
	<entry><!--set last 3 bytes to zero-->最後の3バイトを0にする</entry>
	<entry>trunc(macaddr '12:34:56:78:90:ab')</entry>
	<entry>12:34:56:00:00:00</entry>
       </row>
      </tbody>
     </tgroup>
    </table>

   <para>
    <!--The function <function>trunc</>(<type>macaddr</>) returns a MAC
    address with the last 3 bytes set to 0.  This can be used to
    associate the remaining prefix with a manufacturer.  The directory
    <filename>contrib/mac</> in the source distribution contains some
    utilities to create and maintain such an association table.-->

    <function>trunc</>(<type>macaddr</>)関数は、MACアドレスの最後の3バイトを0に設定して返します。これは、残った接頭部を製造者と対応させるために使うことができます。<filename>contrib/mac</>ディレクトリには対応表を作成/維持するためのユーティリティがあります。
    
   </para>

   <para>
    <!--The <type>macaddr</> type also supports the standard relational
    operators (<literal>&gt;</>, <literal>&lt;=</>, etc.) for
    lexicographical ordering.-->

    <type>macaddr</>型は、辞書順に並べるために<literal>&gt;</>や<literal>&lt;=</>などの標準リレーショナル演算子もサポートしています。
   </para>

  </sect1>


 <sect1 id="functions-conditional">
  <!--<title>Conditional Expressions</title>-->
  <title>条件式</title>
<indexterm><primary sortas="じょうけんしき">条件式</primary></indexterm>
<indexterm><primary>SQL</primary><secondary sortas="じょうけんしき">条件式</secondary></indexterm>
  <para>
   <!--This section describes the <acronym>SQL</acronym>-compliant conditional expressions
   available in <productname>Postgres</productname>.-->

   このセクションでは、<productname>Postgres</productname>で使用可能な<acronym>SQL</acronym>の条件式を説明しています。
  </para>

  <tip>
   <para>
    <!--If your needs go beyond the capabilities of these conditional
    expressions you might want to consider writing a stored procedure
    in a more expressive programming language.-->

    これらの機能以上の条件式を必要とする場合は、別のプログラミング言語を使ってストアドプロシージャを記述することをお勧めします。
   </para>
  </tip>

  <bridgehead renderas="sect2">CASE</bridgehead>

<synopsis>
CASE WHEN <replaceable>condition</replaceable> THEN <replaceable>result</replaceable>
     <optional>WHEN ...</optional>
     <optional>ELSE <replaceable>result</replaceable></optional>
END
</synopsis>

  <para>
   <!--The <acronym>SQL</acronym> <token>CASE</token> expression is a
   generic conditional expression, similar to if/else statements in
   other languages.  <token>CASE</token> clauses can be used wherever
   an expression is valid.  <replaceable>condition</replaceable> is an
   expression that returns a <type>boolean</type> result.  If the result is true
   then the value of the <token>CASE</token> expression is
   <replaceable>result</replaceable>.  If the result is false any
   subsequent <token>WHEN</token> clauses are searched in the same
   manner.  If no <token>WHEN</token>
   <replaceable>condition</replaceable> is true then the value of the
   case expression is the <replaceable>result</replaceable> in the
   <token>ELSE</token> clause.  If the <token>ELSE</token> clause is
   omitted and no condition matches, the result is NULL.-->

   <acronym>SQL</acronym>の<token>CASE</token>式は、一般的な条件式で、他の言語のif/else文と似ています。<token>CASE</token>句は、式が有効な場所であれば、どこでも使用することができます。<replaceable>condition</replaceable>は<type>boolean</type>型を返す式です。結果が真ならば、<token>CASE</token>式の値は<replaceable>result</replaceable>となります。偽の場合は、その後にある<token>WHEN</token>句を探します。<token>WHEN</token>の<replaceable>condition</replaceable>が偽の場合、case式の値は<token>ELSE</token>句の<replaceable>result</replaceable>となります。
  </para>

  <informalexample>
   <para>
    <!--An example:-->以下に例を示します。</para>
<screen>
<prompt>=&gt;</prompt> <userinput>SELECT * FROM test;</userinput>
<computeroutput>
 a
---
 1
 2
 3
</computeroutput>

<prompt>=&gt;</prompt> <userinput>SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test;</userinput>
<computeroutput>
 a | case
---+-------
 1 | one
 2 | two
 3 | other
</computeroutput>
</screen>
  </informalexample>

  <para>
   <!--The data types of all the <replaceable>result</replaceable>
   expressions must be coercible to a single output type.
   See <xref linkend="typeconv-union-case"> for more detail.-->

   <replaceable>result</replaceable>式のすべてのデータ型は1つの出力型に強制されなければなりません。詳細は<xref linkend="typeconv-union-case">を参照してください。
  </para>

<synopsis>
CASE <replaceable>expression</replaceable>
    WHEN <replaceable>value</replaceable> THEN <replaceable>result</replaceable>
    <optional>WHEN ...</optional>
    <optional>ELSE <replaceable>result</replaceable></optional>
END
</synopsis>

  <para>
   <!--This <quote>simple</quote> <token>CASE</token> expression is a
   specialized variant of the general form above.  The
   <replaceable>expression</replaceable> is computed and compared to
   all the <replaceable>value</replaceable>s in the
   <token>WHEN</token> clauses until one is found that is equal.  If
   no match is found, the <replaceable>result</replaceable> in the
   <token>ELSE</token> clause (or NULL) is returned.  This is similar
   to the <function>switch</function> statement in C.-->

   この<quote>simple</quote> <token>CASE</token>式は、前述した通常の形式の特別な変型です。<replaceable>expression</replaceable>は計算され、等しいものが見つかるまで<token>WHEN</token>句のすべての<replaceable>value</replaceable>を比較します。等しい値が見つからない場合、<token>ELSE</token>句の<replaceable>result</replaceable>、またはNULLが返ります。これはC言語の<function>switch</function>文と似ています。
  </para>

  <informalexample>
   <para>
    <!--The example above can be written using the simple
    <token>CASE</token> syntax:-->

    上記の例は、<token>CASE</token>の簡略形を使って以下のように記述することができます。  </para>

<screen>
<prompt>=&gt;</prompt> <userinput>SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM test;</userinput>
<computeroutput>
 a | case
---+-------
 1 | one
 2 | two
 3 | other
</computeroutput>
</screen>
   </informalexample>

   <bridgehead renderas="sect2">COALESCE</bridgehead>

<synopsis>
<function>COALESCE</function>(<replaceable>value</replaceable><optional>, ...</optional>)
</synopsis>

  <para>
   <!--The <function>COALESCE</function> function returns the first of its
   arguments that is not NULL.  This is often useful to substitute a
   default value for NULL values when data is retrieved for display,
   for example:-->

   <function>COALESCE</function>関数は、NULLではない最初の引数を返します。これは表示用にデータを取り出す際に、NULL値の代わりにデフォルト値を使うのに使用できます。</para>

<programlisting>
SELECT COALESCE(description, short_description, '(none)') ...
</programlisting>

<bridgehead renderas="sect2">NULLIF</bridgehead>

<synopsis>
<function>NULLIF</function>(<replaceable>value1</replaceable>, <replaceable>value2</replaceable>)
</synopsis>

  <para>
   <!--The <function>NULLIF</function> function returns NULL if and only
   if <replaceable>value1</replaceable> and
   <replaceable>value2</replaceable> are equal.  Otherwise it returns
   <replaceable>value1</replaceable>.  This can be used to perform the
   inverse operation of the <function>COALESCE</function> example
   given above:-->

   <function>NULLIF</function>関数は、<replaceable>value1</replaceable>と<replaceable>value2</replaceable>が等しい場合のみNULLを返します。その他の場合は<replaceable>value1</replaceable>を返します。これを使って、上記の<function>COALESCE</function>の例の逆演算を以下のように実行することができます。</para>

<programlisting>
SELECT NULLIF(value, '(none)') ...
</programlisting>

  <tip>
   <para>
    <!--<function>COALESCE</function> and <function>NULLIF</function> are
    just shorthand for <token>CASE</token> expressions.  They are actually
    converted into <token>CASE</token> expressions at a very early stage
    of processing, and subsequent processing thinks it is dealing with
    <token>CASE</token>.  Thus an incorrect <function>COALESCE</function> or
    <function>NULLIF</function> usage may draw an error message that
    refers to <token>CASE</token>.-->

    <function>COALESCE</function>関数と<function>NULLIF</function>関数は、<token>CASE</token>表現の簡略表記です。処理の早い段階で<token>CASE</token>式に書き換えられ、その後の処理では<token>CASE</token>を取り扱っているとみなされます。したがって、誤った<function>COALESCE</function>関数や、<function>NULLIF</function>関数の使用により、<token>CASE</token>のエラーメッセージが表示されることがあります。
   </para>
  </tip>

 </sect1>


  <sect1 id="functions-misc">
   <!--<title>Miscellaneous Functions</>-->
   <title>その他の関数</>

   <table>
    <!--<title>Miscellaneous Functions</>-->
    <title>その他の関数</>
    <tgroup cols="3">
     <thead>
      <row><entry><!--Name-->名前</> 
           <entry><!--Return type-->返り値</>
           <entry><!--Description-->説明</>
      </row>
     </thead>

     <tbody>
      <row>
       <entry>current_user()<indexterm><primary>current_user()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>current_user()</secondary></indexterm></>
       <entry>name</>
       <entry><!--user name of current execution context-->
              現在の実行されている内容のユーザー名
       </>
      </row>

      <row>
       <entry>session_user()<indexterm><primary>session_user()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>session_user()</secondary></indexterm></>
       <entry>name</>
       <entry><!--session user name-->セッションユーザー名</>
      </row>

      <row>
       <entry>user()<indexterm><primary>user()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>user()</secondary></indexterm></>
       <entry>name</>
       <entry><!--equivalent to--> <function>current_user</>と同義</>
      </row>
     </tbody>
    </tgroup>
   </table>

   <para>
    <!--The <function>session_user</> is the user that initiated a database
    connection and is fixed for the duration of that connection. The
    <function>current_user</> is the user identifier that is applicable
    for permission checking. Currently it is always equal to the session
    user, but in the future there might be <quote>setuid</> functions and
    other facilities to allow the current user to change temporarily.
    In Unix parlance, the session user is the <quote>real user</>
    and the current user is the <quote>effective user</>.-->

    <function>session_user</>関数はデータベース接続を開始させたユーザーで、その接続が行われている間は変更はありません。<function>current_user</>は権限チェックの際に使用されるユーザー認証です。現在、セッションユーザーと必ず等しい実装となっていますが、将来的には、<quote>setuid</>関数や他の機能があり、現在ユーザーをテンポラリーユーザーに変えることも可能になるかもしれません。Unixでは、セッションユーザーは<quote>実ユーザー</>であり、現在ユーザーは<quote>有効ユーザー</>です。
    
   </para>

   <para>
    <!--Note that these functions have special syntactic status in <acronym>SQL</>;
    they must be called without trailing parentheses.-->

    これらの関数には、<acronym>SQL</>で特別なシンタックスのステータスがあり、かっこを付けずに呼び出さなければならないことに注意してください。
   </para>

   <note>
    <!--<title>Deprecated</>-->
    <title>仕様変更に伴い削除されたもの</>
    <para>
     <!--The function <function>getpgusername()</> is an obsolete equivalent
     of <function>current_user</>.-->

     <function>getpgusername()</>関数は、<function>current_user</>関数の
     旧式のものです。
    </para>
   </note>
  </sect1>


 <sect1 id="functions-aggregate">
  <!--<title>Aggregate Functions</title>-->
  <title>集約関数</title>

  <note>
   <title><!--Author-->著者</title>
   <para>
    <!--Written by--> Isaac Wilcox <email>isaac@azartmedia.com</email>、2000-06-16
   </para>
  </note>

  <para>
   <!--<firstterm>Aggregate functions</firstterm> compute a single result
   value from a set of input values.  The special syntax
   considerations for aggregate functions are explained in <xref
   linkend="syntax-aggregates">.  Consult the <citetitle>PostgreSQL
   Tutorial</citetitle> for additional introductory information.-->

   <firstterm>集約関数</firstterm>は、複数の入力値から1つの結果を返す関数です。集約関数の特別な構文に関しては<xref linkend="syntax-aggregates">に書かれています。その他の入門的内容は<citetitle>&tutorial-guide;</citetitle>を参照してください。
  </para>

  <table tocentry="1">
   <!--<title>Aggregate Functions</title>-->
   <title>集約関数</title>

   <tgroup cols="3">
    <thead>
     <row>
      <entry><!--Function-->関数</entry>
      <entry><!--Description-->説明</entry>
      <entry><!--Notes-->備考</entry>
     </row>
    </thead>

    <tbody>
     <row>
      <entry>AVG(<replaceable class="parameter">expression</replaceable>)<indexterm><primary>AVG()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>AVG()</secondary></indexterm></entry>
      <entry><!--the average (arithmetic mean) of all input values-->
             すべての入力値の平均</entry>
      <entry><!--Finding the average value is available on the following data
       types: <type>smallint</type>, <type>integer</type>,
       <type>bigint</type>, <type>real</type>, <type>double
       precision</type>, <type>numeric</type>, <type>interval</type>.
       The result is of type <type>numeric</type> for any integer type
       input, <type>double precision</type> for floating point input,
       otherwise the same as the input data type.-->

       以下のデータ型において、平均値を求めることができます――<type>smallint</type>型、<type>integer</type>型、<type>bigint</type>型、<type>real</type>型、<type>doubleprecision</type>型、<type>numeric</type>型、<type>interval</type>型。あらゆる整数型の入力の結果は<type>numeric</type>型、浮動小数点入力の結果は<type>double precision</type>型となります。その他のものは、入力されたデータ型と同じ型となります。
       
      </entry>
     </row>

     <row>
      <entry>COUNT(*)<indexterm><primary>COUNT()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>COUNT()</secondary></indexterm></entry>
      <entry><!--number of input values-->入力された値の数</entry>
      <entry><!--The return value is of type--> <type>integer</type>型</entry>
     </row>

     <row>
      <entry>COUNT(<replaceable class="parameter">expression</replaceable>)<indexterm><primary>COUNT()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>COUNT(</secondary></indexterm></entry>
      <entry><!--Counts the input values for which the value of <replaceable
       class="parameter">expression</replaceable> is not NULL.-->

       <replaceable class="parameter">expression</replaceable>の値がNULLでない入力値の個数
      </entry>
      <entry></entry>
     </row>

     <row>
      <entry>MAX(<replaceable class="parameter">expression</replaceable>)<indexterm><primary>MAX()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>MAX()</secondary></indexterm></entry>
      <entry><!--the maximum value of <replaceable class="parameter">expression</replaceable> across all input values-->
             すべての入力された値の<replaceable class="parameter">expression</replaceable>の最大値
      </entry>
      <entry><!--Available for all numeric, string, and date/time types.  The
       result has the same type as the input expression.-->

       すべての数、文字列、日付/時刻データ型で使用できます。結果は入力された型と同じです。
      </entry>
     </row>

     <row>
      <entry>MIN(<replaceable class="parameter">expression</replaceable>)<indexterm><primary>MIN()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>MIN()</secondary></indexterm></entry>
      <entry><!--the minimum value of <replaceable class="parameter">expression</replaceable> across all input values-->
             すべての入力された値の<replaceable class="parameter">expression</replaceable>の最小値
      </entry>
      <entry><!--Available for all numeric, string, and date/time types.  The
       result has the same type as the input expression.-->

       すべての数、文字列、日付/時刻データ型で使用できます。結果は入力された型と同じです。
      </entry>
     </row>

     <row>
      <entry>STDDEV(<replaceable class="parameter">expression</replaceable>)<indexterm><primary>STDDEV()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>STDDEV()</secondary></indexterm></entry>
      <entry><!--the sample standard deviation of the input values-->
              入力値の標準偏差
      </entry>
      <entry><!--Finding the standard deviation is available on the following
       data types: <type>smallint</type>, <type>integer</type>,
       <type>bigint</type>, <type>real</type>, <type>double
       precision</type>, <type>numeric</type>.  The result is of type
       <type>double precision</type> for floating point input,
       otherwise <type>numeric</type>.-->

       以下のデータ型において、入力値の標準偏差を求めることができます――<type>smallint</type>型、<type>integer</type>型、<type>bigint</type>型、<type>real</type>型、<type>doubleprecision</type>型、<type>numeric</type>型。浮動小数点入力の結果は<type>double precision</type>型となります。その他のものは、<type>numeric</type>型となります。
      </entry>
     </row>

     <row>
      <entry>SUM(<replaceable class="parameter">expression</replaceable>)<indexterm><primary>SUM()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>SUM()</secondary></indexterm></entry>
      <entry><!--sum of <replaceable class="parameter">expression</replaceable> across all input values-->
             すべての入力された値の<replaceable class="parameter">expression</replaceable>の和
      </entry>
      <entry><!--Summation is available on the following data types:
       <type>smallint</type>, <type>integer</type>,
       <type>bigint</type>, <type>real</type>, <type>double
       precision</type>, <type>numeric</type>, <type>interval</type>.
       The result is of type <type>numeric</type> for any integer type
       input, <type>double precision</type> for floating point input,
       otherwise the same as the input data type.-->

       以下のデータ型において、入力値の和を求めることができます――<type>smallint</type>型、<type>integer</type>型、<type>bigint</type>型、<type>real</type>型、<type>doubleprecision</type>型、<type>numeric</type>型、<type>interval</type>型。あらゆる整数型の入力の結果は<type>numeric</type>型、浮動小数点入力の結果は<type>double precision</type>型となります。その他のものは、入力されたデータ型と同じ型となります。
      </entry>
     </row>

     <row>
      <entry>VARIANCE(<replaceable class="parameter">expression</replaceable>)<indexterm><primary>VARIANCE()</primary></indexterm><indexterm><primary sortas="かんすう">関数</primary><secondary>VARIANCE(</secondary></indexterm></entry>
      <entry><!--the sample variance of the input values-->
             入力値の分散
      </entry>
      <entry><!--The variance is the square of the standard deviation.  The
       supported data types are the same.-->

       分散は標準偏差の2乗です。サポートされるデータ型は同じです。
      </entry>
     </row>

    </tbody>
   </tgroup>
  </table>

  <para>
   <!--It should be noted that except for <function>COUNT</function>,
   these functions return NULL when no rows are selected.  In
   particular, <function>SUM</function> of no rows returns NULL, not
   zero as one might expect.-->

   <function>COUNT</function>関数以外の関数は、列が選択されていなければNULLを返すことに注意してください。特に、列がない<function>SUM</function>は0ではなく、NULLを返します。 
  </para>

 </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:
-->
