9.5. バイナリ列関数と演算子
本節ではbytea型の値を調べたり操作するための関数と演算子について説明します。
SQLでは、引数の区切りにカンマではなく特定のキーワードを使う特殊な構文の文字列関数を、いくつか定義しています。
詳細は表9-9を参照してください。
これら関数は通常の関数呼び出し構文を使用して実装されています。
(表9-10を参照してください。)
表 9-9. SQLバイナリ列関数と演算子
| 関数 | 返り値型 | 説明 | 例 | 結果 |
|---|
| string ||
string | bytea | 文字列結合
| '\\\\Post'::bytea || '\\047gres\\000'::bytea | \\Post'gres\000 |
| octet_length(string) | integer | バイナリ列のバイト数 | octet_length( 'jo\\000se'::bytea) | 5 |
| position(substring in string) | integer | 指定された部分文字列の場所 | position('\\000om'::bytea in 'Th\\000omas'::bytea) | 3 |
| substring(string [from integer] [for integer]) | bytea | 部分文字列の取り出し
| substring('Th\\000omas'::bytea from 2 for 3) | h\000o |
| trim([both]
bytes from
string)
| bytea | bytesで指定されるバイトのみを含む最も長い文字列をstringの先頭と末尾から削除します。
| trim('\\000'::bytea from '\\000Tom\\000'::bytea) | Tom |
| get_byte(string, offset) | integer | 文字列から1バイトを取り出す。
| get_byte('Th\\000omas'::bytea, 4) | 109 |
| set_byte(string,
offset, newvalue) | bytea | 文字列内の1バイトを設定する。
| set_byte('Th\\000omas'::bytea, 4, 64) | Th\000o@as |
| get_bit(string, offset) | integer | 文字列から1ビットを取り出す。
| get_bit('Th\\000omas'::bytea, 45) | 1 |
| set_bit(string,
offset, newvalue) | bytea | 文字列内の1ビットを設定する。
| set_bit('Th\\000omas'::bytea, 45, 0) | Th\000omAs |
このほか、表9-10に列挙するバイナリ列操作関数が使えます。
そのいくつかは、表9-9で説明した標準SQLの文字列関数を実装するために内部的に使用されています。
表 9-10. その他のバイナリ列関数
| 関数 | 返り値型 | 説明 | 例 | 結果 |
|---|
| btrim(string
bytea bytes bytea) | bytea | bytesで指定されたバイトのみを有する最長の文字列をstringの先頭と末尾から削除します。
| btrim('\\000trim\\000'::bytea, '\\000'::bytea) | trim |
| length(string) | integer | バイナリ列の長さ
| length('jo\\000se'::bytea) | 5 |
| decode(string text,
type text)
| bytea | 以前にencode()で符号化されたstringからバイナリ列を復号します。
パラメータの型はencode()と同じです。
| decode('123\\000456', 'escape') | 123\000456 |
| encode(string bytea,
type text)
| text | バイナリ列をASCIIのみの表現に符号化します。
サポートされている型は、base64、hex、escapeです。
| encode('123\\000456'::bytea, 'escape') | 123\000456 |