This section describes functions and operators for examining and
manipulating binary strings, that is values of type <type>bytea</type>.
Many of these are equivalent, in purpose and syntax, to the
text-string functions described in the previous section.
本節ではバイナリ文字列、すなわちbytea
型の値を調べたり操作するための関数と演算子について説明します。
これらの多くは前節で説明されているテキスト文字列関数と、目的と構文という意味で同じです。
<acronym>SQL</acronym> defines some string functions that use key words, rather than commas, to separate arguments. Details are in <xref linkend="functions-binarystring-sql"/>. <productname>PostgreSQL</productname> also provides versions of these functions that use the regular function invocation syntax (see <xref linkend="functions-binarystring-other"/>). SQLでは、引数の区切りにカンマではなくキーワードを使う文字列関数を、いくつか定義しています。 詳細は表 9.11を参照してください。 またPostgreSQLは、これらの関数に対して通常の関数呼び出し構文を使用するバージョンを提供します(表 9.12を参照してください)。
表9.11 SQLバイナリ文字列関数と演算子
Additional binary string manipulation functions are available and are listed in <xref linkend="functions-binarystring-other"/>. Some of them are used internally to implement the <acronym>SQL</acronym>-standard string functions listed in <xref linkend="functions-binarystring-sql"/>. この他、表 9.12に列挙するバイナリ文字列操作関数が使えます。 そのいくつかは、表 9.11で列挙した標準SQLの文字列関数を実装するため、内部的に使用されます。
表9.12 その他のバイナリ文字列関数
Function 関数 Description 説明 Example(s) 例 |
---|
Returns the number of bits set in the binary string (also known as <quote>popcount</quote>). バイナリ文字列中のセットされているビットの数を返します(「popcount」としても知られています)。
|
Extracts <link linkend="functions-zerobased-note">n'th</link> bit from binary string. バイナリ文字列のn番目のビットを取り出します。
|
Extracts <link linkend="functions-zerobased-note">n'th</link> byte from binary string. バイナリ文字列のn番目のバイトを取り出します。
|
Returns the number of bytes in the binary string. バイナリ文字列のバイト数を返します。
|
Returns the number of characters in the binary string, assuming
that it is text in the given <parameter>encoding</parameter>.
与えられた
|
Computes the MD5 <link linkend="functions-hash-note">hash</link> of the binary string, with the result written in hexadecimal. バイナリ文字列のMD5ハッシュ計算し、16進数で結果を返します。
|
Sets <link linkend="functions-zerobased-note">n'th</link> bit in
binary string to <parameter>newvalue</parameter>.
バイナリ文字列のn番目のビットを
|
Sets <link linkend="functions-zerobased-note">n'th</link> byte in
binary string to <parameter>newvalue</parameter>.
バイナリ文字列のn番目のバイトを
|
Computes the SHA-224 <link linkend="functions-hash-note">hash</link> of the binary string. バイナリ文字列のSHA-224 ハッシュを計算します。
|
Computes the SHA-256 <link linkend="functions-hash-note">hash</link> of the binary string. バイナリ文字列のSHA-256 ハッシュを計算します。
|
Computes the SHA-384 <link linkend="functions-hash-note">hash</link> of the binary string. バイナリ文字列のSHA-384 ハッシュを計算します。
|
Computes the SHA-512 <link linkend="functions-hash-note">hash</link> of the binary string. バイナリ文字列のSHA-512 ハッシュを計算します。
|
Extracts the substring of <parameter>bytes</parameter> starting at
the <parameter>start</parameter>'th byte,
and extending for <parameter>count</parameter> bytes if that is
specified. (Same
as <literal>substring(<parameter>bytes</parameter>
from <parameter>start</parameter>
for <parameter>count</parameter>)</literal>.)
|
Functions <function>get_byte</function> and <function>set_byte</function>
number the first byte of a binary string as byte 0.
Functions <function>get_bit</function> and <function>set_bit</function>
number bits from the right within each byte; for example bit 0 is the least
significant bit of the first byte, and bit 15 is the most significant bit
of the second byte.
get_byte
とset_byte
はバイナリ文字列の先頭バイトを0バイトとして数えます。
get_bit
とset_bit
は各バイト内で右からビットを数えます。例えばビット0は先頭バイトの最下位ビットとなり、ビット15は第二バイトの最上位ビットとなります。
For historical reasons, the function <function>md5</function>
returns a hex-encoded value of type <type>text</type> whereas the SHA-2
functions return type <type>bytea</type>. Use the functions
<link linkend="function-encode"><function>encode</function></link>
and <link linkend="function-decode"><function>decode</function></link> to
convert between the two. For example write <literal>encode(sha256('abc'),
'hex')</literal> to get a hex-encoded text representation,
or <literal>decode(md5('abc'), 'hex')</literal> to get
a <type>bytea</type> value.
歴史的な理由により、md5
は16進のエンコード値をtext
型で返すのに対し、SHA-2関数はbytea
を返します。
両者の間の変換を行うには、関数encode
とdecode
を使ってください。
たとえば、16進のエンコードのテキスト表現を得るには、encode(sha256('abc'),'hex')
、bytea
を得るにはdecode(md5('abc'), 'hex')
としてください。
Functions for converting strings between different character sets
(encodings), and for representing arbitrary binary data in textual
form, are shown in
<xref linkend="functions-binarystring-conversions"/>. For these
functions, an argument or result of type <type>text</type> is expressed
in the database's default encoding, while arguments or results of
type <type>bytea</type> are in an encoding named by another argument.
異なる文字集合(文字符号化方式)間で文字列を変換する関数と、テキスト形式の任意のバイナリデータを表現する関数を表 9.13で示します。
引数あるいは結果のtext
型はデータベースのデフォルト文字符号化方式で表現され、bytea
型の引数あるいは結果は別の引数で指定する文字符号化方式名で表現されます。
表9.13 テキスト/バイナリ文字列変換関数
Function 関数 Description 説明 Example(s) 例 |
---|
Converts a binary string representing text in
encoding <parameter>src_encoding</parameter>
to a binary string in encoding <parameter>dest_encoding</parameter>
(see <xref linkend="multibyte-conversions-supported"/> for
available conversions).
文字符号化方式
|
Converts a binary string representing text in
encoding <parameter>src_encoding</parameter>
to <type>text</type> in the database encoding
(see <xref linkend="multibyte-conversions-supported"/> for
available conversions).
文字符号化方式
|
Converts a <type>text</type> string (in the database encoding) to a
binary string encoded in encoding <parameter>dest_encoding</parameter>
(see <xref linkend="multibyte-conversions-supported"/> for
available conversions).
|
Encodes binary data into a textual representation; supported
<parameter>format</parameter> values are:
<link linkend="encode-format-base64"><literal>base64</literal></link>,
<link linkend="encode-format-escape"><literal>escape</literal></link>,
<link linkend="encode-format-hex"><literal>hex</literal></link>.
バイナリデータをテキスト表現形式に符号化します。サポートされている
|
Decodes binary data from a textual representation; supported
<parameter>format</parameter> values are the same as
for <function>encode</function>.
テキスト表現からバイナリデータに復号します。
|
The <function>encode</function> and <function>decode</function>
functions support the following textual formats:
encode
とdecode
関数は以下のテキスト形式をサポートしています。
The <literal>base64</literal> format is that
of <ulink url="https://datatracker.ietf.org/doc/html/rfc2045#section-6.8">RFC
2045 Section 6.8</ulink>. As per the <acronym>RFC</acronym>, encoded lines are
broken at 76 characters. However instead of the MIME CRLF
end-of-line marker, only a newline is used for end-of-line.
The <function>decode</function> function ignores carriage-return,
newline, space, and tab characters. Otherwise, an error is
raised when <function>decode</function> is supplied invalid
base64 data — including when trailing padding is incorrect.
base64
形式はRFC 2045 6.8節のものです。
RFCに従い、符号化された行は76文字に分割されます。
しかし、MIME CRLF行端指示子ではなくて単に改行が行端として使われます。
decode
関数はキャリッジ・リターン、改行、空白、タブ文字を無視します。
行端パディング文字が不正な場合を含み、decode
に不正なbase64のデータが与えられるとエラーが生じます。
The <literal>escape</literal> format converts zero bytes and
bytes with the high bit set into octal escape sequences
(<literal>\</literal><replaceable>nnn</replaceable>), and it doubles
backslashes. Other byte values are represented literally.
The <function>decode</function> function will raise an error if a
backslash is not followed by either a second backslash or three
octal digits; it accepts other byte values unchanged.
escape
形式はゼロバイトとハイビットがセットされたバイトを8進エスケープシーケンス(\
nnn
)に変換し、バックスラッシュを二重化します。
他のバイト値は文字通りに表現されます。
バックスラッシュの後が二番目のバックスラッシュあるいは3つの8進数のどちらでもなければ、decode
関数はエラーを生じます。他のバイト値はそのまま受け付けます。
The <literal>hex</literal> format represents each 4 bits of
data as one hexadecimal digit, <literal>0</literal>
through <literal>f</literal>, writing the higher-order digit of
each byte first. The <function>encode</function> function outputs
the <literal>a</literal>-<literal>f</literal> hex digits in lower
case. Because the smallest unit of data is 8 bits, there are
always an even number of characters returned
by <function>encode</function>.
The <function>decode</function> function
accepts the <literal>a</literal>-<literal>f</literal> characters in
either upper or lower case. An error is raised
when <function>decode</function> is given invalid hex data
— including when given an odd number of characters.
hex
形式はデータの各々の4ビットを、それぞれのバイトの上位桁を最初にして、0
からf
の16進数で表現します。
encode
関数はa
-f
の16進数を小文字で出力します。
最小のデータ単位は8ビットなので、encode
が返す文字数は常に偶数です。
decode
関数はa
-f
の文字が大文字でも小文字でも受け付けます。
decode
関数は、奇数の文字数を含み、不正な16進データを与えられるとエラーが生じます。
See also the aggregate function <function>string_agg</function> in
<xref linkend="functions-aggregate"/> and the large object functions
in <xref linkend="lo-funcs"/>.
9.21内の集約関数string_agg
と33.4内のラージオブジェクト関数も参照してください。