| PostgreSQL 9.1.5文書 | ||||
|---|---|---|---|---|
| 前のページ | 巻戻し | 第 9章関数と演算子 | 早送り | 次のページ | 
本節では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は第二バイトの最上位ビットとなります。