バイナリ文字列関数と演算子

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 9章関数と演算子 | 早送り | 次のページ

# 9.5. バイナリ文字列関数と演算子

本節では`bytea`型の値を調べたり操作するための関数と演算子について説明します。

SQLでは、引数の区切りにカンマではなくキーワードを使う文字列関数を、いくつか定義しています。詳細は表9-8を参照してください。 またPostgreSQLは、これらの関数に対して通常の関数呼び出し構文を使用するバージョンを提供します（表9-6を参照してください）。

> 注意: このページで示されるサンプル結果は、サーバパラメータである`bytea_output`が`escape`に設定されていることを想定しています。(この設定はPostgreSQLの伝統的な形式です)

表 9-8. SQLバイナリ文字列関数と演算子

関数 | 戻り値型 | 説明 | 例 | 結果
--- | --- | --- | --- | ---
``string` `||` `string`` | `bytea` | 文字列結合 | `E'\\\\Post'::bytea || E'\\047gres\\000'::bytea` | `\\Post'gres\000`
``octet_length(`string`)`` | `int` | バイナリ文字列中のバイト数 | `octet_length(E'jo\\000se'::bytea)` | `5`
``overlay(`string` placing `string` from `int` [for `int`])`` | `bytea` | 部分文字列の置換 | `overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3)` | `T\\002\\003mas`
``position(`substring` in `string`)`` | `int` | 指定した部分文字列の位置 | `position(E'\\000om'::bytea in E'Th\\000omas'::bytea)` | `3`
``substring(`string` [from `int`] [for `int`])`` | `bytea` | 部分文字列の抽出 | `substring(E'Th\\000omas'::bytea from 2 for 3)` | `h\000o`
``trim([both] `bytes` from `string`)`` | `bytea` | 文字列`string`の先頭から末尾までで`bytes`のバイトのみを含む最長の文字列を削除します。 | `trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea)` | `Tom`

この他、表9-9に列挙するバイナリ列操作関数が使えます。そのいくつかは、表9-8で説明した標準SQLの文字列関数を実装するために内部的に使用されています。

表 9-9. その他のバイナリ文字列関数

関数 | 戻り値型 | 説明 | 例 | 結果
--- | --- | --- | --- | ---
``btrim(`string` `bytea`, `bytes` `bytea`)`` | `bytea` | `bytes`で指定されたバイトのみを有する最長の文字列を`string`の先頭と末尾から削除します。 | `btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea)` | `trim`
``decode(`string` `text`, `type` `text`)`` | `bytea` | 以前に`encode`で符号化された`string`をバイナリ文字列に復号化します。 パラメータ型は`encode`の指定と同じです。 | `decode(E'123\\000456', 'escape')` | `123\000456`
``encode(`string` `bytea`, `type` `text`)`` | `text` | バイト文字列をASCIIのみの表現に符号化します。サポートされる型は`base64`、`hex`、および`escape`です | `encode(E'123\\000456'::bytea, 'escape')` | `123\000456`
``get_bit(`string`, `offset`)`` | `int` | 文字列から1ビット抽出します。 | `get_bit(E'Th\\000omas'::bytea, 45)` | `1`
``get_byte(`string`, `offset`)`` | `int` | 文字列から1バイト抽出します。 | `get_byte(E'Th\\000omas'::bytea, 4)` | `109`
``length(`string`)`` | `int` | バイナリ文字列の長さ | `length(E'jo\\000se'::bytea)` | `5`
``md5(`string`)`` | `text` | `string`のMD5のハッシュを計算し、結果を16進数で返します。 | `md5(E'Th\\000omas'::bytea)` | `8ab2d3c9689aaf18 b4958c334c82d8b1`
``set_bit(`string`, `offset`, `newvalue`)`` | `bytea` | 文字列内のビットを設定します。 | `set_bit(E'Th\\000omas'::bytea, 45, 0)` | `Th\000omAs`
``set_byte(`string`, `offset`, `newvalue`)`` | `bytea` | 文字列内の1バイトを設定します。 | `set_byte(E'Th\\000omas'::bytea, 4, 64)` | `Th\000o@as`

`get_byte`と`set_byte`はバイナリ列の先頭バイトを0バイトとして数えます。`get_bit`と`set_bit`は各バイト内を右からビットを数えます。例えばビット0は先頭バイトの最下位ビットとなり、ビット15は第二バイトの最上位ビットとなります。

前のページ | ホーム | 次のページ
文字列関数と演算子 | 上に戻る | ビット文字列関数と演算子