文字列関数と演算子

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

# 9.4. 文字列関数と演算子

この節では文字列の値の調査や操作のための関数と演算子について説明します。 ここでの文字列とは`character`データ型、`character varying`データ型、および`text`データ型全ての値を含みます。 補足説明のない限り、下記に挙げてある全ての関数はこれら全てのデータ型に対して使用できますが、`character`データ型を使用した場合、自動的にパッドされるという副作用がありますので注意してください。 一般的に、ここで説明する関数は文字列データ型でないデータであっても、最初に文字列表現に変換することで使用できます。 ビット列データ型に特定した関数も幾つかあります。

SQLでは、引数の区切りにカンマではなく特定のキーワードを使う特殊な構文の文字列関数を、いくつか定義しています。 詳細は表9-5を参照してください。 また、これらの関数は通常の関数呼び出しによって実装されています。 (表9-6 を参照。)

表 9-5. SQL文字列関数と演算子

関数 | 戻り値型 | 説明 | 例 | 結果
--- | --- | --- | --- | ---
``string` `||` `string`` | `text` | 文字列結合 | `'Post' || 'greSQL'` | `PostgreSQL`
``bit_length`(`string`)` | `integer` | 文字列のビット数 | `bit_length('jose')` | `32`
``char_length`(`string`)` or ``character_length`(`string`)` | `integer` | 文字列の中の文字数 | `char_length('jose')` | `4`
``convert`(`string` using `conversion_name`)` | `text` | 指定した変換名でコード変換します。 変換は、`CREATE CONVERSION`を使用して定義できます。 また、事前に定義されている変換名もいくつかあります。 使用可能な変換名については、表9-7を参照してください。 | `convert('PostgreSQL' using iso_8859_1_to_utf_8)` | Unicode(UTF-8)符号化方式での`'PostgreSQL'`
``lower`(`string`)` | `text` | 文字列を小文字に変換 | `lower('TOM')` | `tom`
``octet_length`(`string`)` | `integer` | 文字列のバイト数 | `octet_length('jose')` | `4`
``overlay`(`string` placing `string` from `integer` [for `integer`])` | `text` | 部分文字列の挿入 | `overlay('Txxxxas' placing 'hom' from 2 for 4)` | `Thomas`
``position`(`substring` in `string`)` | `integer` | 指定した部分文字列の場所 | `position('om' in 'Thomas')` | `3`
``substring`(`string` [from `integer`] [for `integer`])` | `text` | 部分文字列の取り出し | `substring('Thomas' from 2 for 3)` | `hom`
``substring`(`string` from `pattern`)` | `text` | POSIX正規表現にマッチする部分文字列の取り出し | `substring('Thomas' from '...$')` | `mas`
``substring`(`string` from `pattern` for `escape`)` | `text` | SQL正規表現にマッチする部分文字列の取り出し | `substring('Thomas' from '%#"o_a#"_' for '#')` | `oma`
``trim`([leading | trailing | both] [`characters`] from `string`)` | `text` | `characters`(デフォルトでは空白)で指定された文字のみを含む最も長い文字列を、`string`の先頭、末尾、そして、その両方から削除します。 | `trim(both 'x' from 'xTomxx')` | `Tom`
``upper`(`string`)` | `text` | 文字列を大文字に変換 | `upper('tom')` | `TOM`

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

表 9-6. その他の文字列関数

関数 | 戻り値型 | 説明 | 例 | 結果
--- | --- | --- | --- | ---
``ascii`(`text`)` | `integer` | 引数の最初の文字のASCIIコード | `ascii('x')` | `120`
``btrim`(`string` `text` [, `characters` `text`])` | `text` | `characters`(デフォルトは空白文字)で指定された文字のみを有する最長の文字列を、`string`の先頭と末尾から削除します。 | `btrim('xyxtrimyyx', 'xy')` | `trim`
``chr`(`integer`)` | `text` | 与えられたASCIIコードの文字 | `chr(65)` | `A`
``convert`(`string` `text`, [`src_encoding` `name`,] `dest_encoding` `name`)` | `text` | 文字列を`dest_encoding`に変換します。 元の符号化方式は`src_encoding`で指定されます。 `src_encoding`が省略された場合はデータベースの符号化方式を採用します。 | `convert( 'text_in_unicode', 'UNICODE', 'LATIN1')` | ISO 8859-1符号化方式で表された`text_in_unicode`
``decode`(`string` `text`, `type` `text`)` | `bytea` | 以前に`encode()`で符号化された`string`からバイナリデータを復号します。 パラメータの型は`encode()`と同じです。 | `decode('MTIzAAE=', 'base64')` | `123\000\001`
``encode`(`data` `bytea`, `type` `text`)` | `text` | バイナリデータをASCIIのみの表現に符号化します。 サポートされている型は、`base64`、`hex`、`escape`です。 | `encode( '123\\000\\001', 'base64')` | `MTIzAAE=`
``initcap`(`text`)` | `text` | それぞれの単語の第一文字を大文字にし、残りは小文字のまま残します。 ここで単語とは、英数字以外の文字で区切られた、英数字からなる文字の並びのことです。 | `initcap('hi THOMAS')` | `Hi Thomas`
``length`(`string` `text`)` | `integer` | `string`の長さ | `length('jose')` | `4`
``lpad`(`string` `text`, `length` `integer` [, `fill` `text`])` | `text` | 文字`fill`(デフォルトは空白)を文字列の前に追加して、`string`を`length`の長さにします。 `string`が既に`length`の長さを越えている場合は(右側が)切り捨てられます。 | `lpad('hi', 5, 'xy')` | `xyxhi`
``ltrim`(`string` `text` [, `characters` `text`])` | `text` | `string`の最初から、`characters`(デフォルトは空白)で指定された文字だけを有する最長の文字列を削除します。 | `ltrim('zzzytrim', 'xyz')` | `trim`
``md5`(`string` `text`)` | `text` | `string`のMD5ハッシュを計算し、16進数で結果を返します。 | `md5('abc')` | `900150983cd24fb0 d6963f7d28e17f72`
``pg_client_encoding`()` | `name` | 現在のクライアントの符号化方式の名前。 | `pg_client_encoding()` | `SQL_ASCII`
``quote_ident`(`string` text)` | `text` | 与えられた文字列を、SQL問い合わせ文字列で識別子として使用できるように、適切な引用符を付けて返します。 引用符は、必要な場合(例えば、文字列に識別子として使用できない文字が含まれる場合や、大文字変換される場合)にのみ追加されます。 埋め込まれた引用符は、適切に二重になります。 | `quote_ident('Foo bar')` | `"Foo bar"`
``quote_literal`(`string` text)` | `text` | 与えられた文字列を、SQL問い合わせ文字列で文字リテラルとして使用できるように、適切な引用符を付けて返します。 埋め込まれた引用符およびバックスラッシュは、適切に二重になります。 | `quote_literal( 'O\'Reilly')` | `'O''Reilly'`
``repeat`(`string` `text`, `number` `integer`)` | `text` | `string`を指定`number`数分繰り返します。 | `repeat('Pg', 4)` | `PgPgPgPg`
``replace`(`string` `text`, `from` `text`, `to` `text`)` | `text` | `string`に出現する全ての`from`部分文字列を`to`部分文字列に置換します。 | `replace( 'abcdefabcdef', 'cd', 'XX')` | `abXXefabXXef`
``rpad`(`string` `text`, `length` `integer` [, `fill` `text`])` | `text` | 文字`fill`(デフォルトは空白)を文字列に追加して、`string`を`length`の長さにします。 `string`が既に`length`の長さを越えている場合は切り捨てられます。 | `rpad('hi', 5, 'xy')` | `hixyx`
``rtrim`(`string` `text` [, `characters` `text`])` | `text` | `string`の末尾から、`characters`（デフォルトは空白）で指定された文字のみを有する最長の文字列を削除します。 | `rtrim('trimxxxx', 'x')` | `trim`
``split_part`(`string` `text`, `delimiter` `text`, `field` `integer`)` | `text` | `string`を`delimiter`で分割し、その結果から(1から始まるように数える)指定したフィールドを返します。 | `split_part( 'abc~@~def~@~ghi', '~@~', 2)` | `def`
``strpos`(`string`, `substring`)` | `text` | 指定した部分文字列の位置を特定します (`position(`substring` in `string`)` と同じですが、引数の順序が逆になっていることに注意してください)。 | `strpos('high', 'ig')` | `2`
``substr`(`string`, `from` [, `count`])` | `text` | 指定した部分文字列を取り出します(`substring(`string` from `from` for `count`)`と同じです)。 | `substr('alphabet', 3, 2)` | `ph`
``to_ascii`(`text` [, `encoding`])` | `text` | `text`を、他の符号化方式からASCIIに変換します。 [a] | `to_ascii('Karel')` | `Karel`
``to_hex`(`number` `integer` or `bigint`)` | `text` | `number`を、同等の16進数表現に変換します。 | `to_hex(2147483647)` | `7fffffff`
``translate`(`string` `text`, `from` `text`, `to` `text`)` | `text` | `from`集合で指定された文字と一致する`string`にある全ての文字は、それに対応する`to`で指定された文字に置き換えられます。 | `translate('12345', '14', 'ax')` | `a23x5`
注意: a. `to_ascii`関数は、`LATIN1`、`LATIN2`、`LATIN9`、および、`WIN1250`符号化方式からの変換のみをサポートしています。

表 9-7. 組み込み済みの変換

変換名 [a] | 変換前のコード | 変換後のコード
--- | --- | ---
`ascii_to_mic` | `SQL_ASCII` | `MULE_INTERNAL`
`ascii_to_utf_8` | `SQL_ASCII` | `UNICODE`
`big5_to_euc_tw` | `BIG5` | `EUC_TW`
`big5_to_mic` | `BIG5` | `MULE_INTERNAL`
`big5_to_utf_8` | `BIG5` | `UNICODE`
`euc_cn_to_mic` | `EUC_CN` | `MULE_INTERNAL`
`euc_cn_to_utf_8` | `EUC_CN` | `UNICODE`
`euc_jp_to_mic` | `EUC_JP` | `MULE_INTERNAL`
`euc_jp_to_sjis` | `EUC_JP` | `SJIS`
`euc_jp_to_utf_8` | `EUC_JP` | `UNICODE`
`euc_kr_to_mic` | `EUC_KR` | `MULE_INTERNAL`
`euc_kr_to_utf_8` | `EUC_KR` | `UNICODE`
`euc_tw_to_big5` | `EUC_TW` | `BIG5`
`euc_tw_to_mic` | `EUC_TW` | `MULE_INTERNAL`
`euc_tw_to_utf_8` | `EUC_TW` | `UNICODE`
`gb18030_to_utf_8` | `GB18030` | `UNICODE`
`gbk_to_utf_8` | `GBK` | `UNICODE`
`iso_8859_10_to_utf_8` | `LATIN6` | `UNICODE`
`iso_8859_13_to_utf_8` | `LATIN7` | `UNICODE`
`iso_8859_14_to_utf_8` | `LATIN8` | `UNICODE`
`iso_8859_15_to_utf_8` | `LATIN9` | `UNICODE`
`iso_8859_16_to_utf_8` | `LATIN10` | `UNICODE`
`iso_8859_1_to_mic` | `LATIN1` | `MULE_INTERNAL`
`iso_8859_1_to_utf_8` | `LATIN1` | `UNICODE`
`iso_8859_2_to_mic` | `LATIN2` | `MULE_INTERNAL`
`iso_8859_2_to_utf_8` | `LATIN2` | `UNICODE`
`iso_8859_2_to_windows_1250` | `LATIN2` | `WIN1250`
`iso_8859_3_to_mic` | `LATIN3` | `MULE_INTERNAL`
`iso_8859_3_to_utf_8` | `LATIN3` | `UNICODE`
`iso_8859_4_to_mic` | `LATIN4` | `MULE_INTERNAL`
`iso_8859_4_to_utf_8` | `LATIN4` | `UNICODE`
`iso_8859_5_to_koi8_r` | `ISO_8859_5` | `KOI8`
`iso_8859_5_to_mic` | `ISO_8859_5` | `MULE_INTERNAL`
`iso_8859_5_to_utf_8` | `ISO_8859_5` | `UNICODE`
`iso_8859_5_to_windows_1251` | `ISO_8859_5` | `WIN`
`iso_8859_5_to_windows_866` | `ISO_8859_5` | `ALT`
`iso_8859_6_to_utf_8` | `ISO_8859_6` | `UNICODE`
`iso_8859_7_to_utf_8` | `ISO_8859_7` | `UNICODE`
`iso_8859_8_to_utf_8` | `ISO_8859_8` | `UNICODE`
`iso_8859_9_to_utf_8` | `LATIN5` | `UNICODE`
`johab_to_utf_8` | `JOHAB` | `UNICODE`
`koi8_r_to_iso_8859_5` | `KOI8` | `ISO_8859_5`
`koi8_r_to_mic` | `KOI8` | `MULE_INTERNAL`
`koi8_r_to_utf_8` | `KOI8` | `UNICODE`
`koi8_r_to_windows_1251` | `KOI8` | `WIN`
`koi8_r_to_windows_866` | `KOI8` | `ALT`
`mic_to_ascii` | `MULE_INTERNAL` | `SQL_ASCII`
`mic_to_big5` | `MULE_INTERNAL` | `BIG5`
`mic_to_euc_cn` | `MULE_INTERNAL` | `EUC_CN`
`mic_to_euc_jp` | `MULE_INTERNAL` | `EUC_JP`
`mic_to_euc_kr` | `MULE_INTERNAL` | `EUC_KR`
`mic_to_euc_tw` | `MULE_INTERNAL` | `EUC_TW`
`mic_to_iso_8859_1` | `MULE_INTERNAL` | `LATIN1`
`mic_to_iso_8859_2` | `MULE_INTERNAL` | `LATIN2`
`mic_to_iso_8859_3` | `MULE_INTERNAL` | `LATIN3`
`mic_to_iso_8859_4` | `MULE_INTERNAL` | `LATIN4`
`mic_to_iso_8859_5` | `MULE_INTERNAL` | `ISO_8859_5`
`mic_to_koi8_r` | `MULE_INTERNAL` | `KOI8`
`mic_to_sjis` | `MULE_INTERNAL` | `SJIS`
`mic_to_windows_1250` | `MULE_INTERNAL` | `WIN1250`
`mic_to_windows_1251` | `MULE_INTERNAL` | `WIN`
`mic_to_windows_866` | `MULE_INTERNAL` | `ALT`
`sjis_to_euc_jp` | `SJIS` | `EUC_JP`
`sjis_to_mic` | `SJIS` | `MULE_INTERNAL`
`sjis_to_utf_8` | `SJIS` | `UNICODE`
`tcvn_to_utf_8` | `TCVN` | `UNICODE`
`uhc_to_utf_8` | `UHC` | `UNICODE`
`utf_8_to_ascii` | `UNICODE` | `SQL_ASCII`
`utf_8_to_big5` | `UNICODE` | `BIG5`
`utf_8_to_euc_cn` | `UNICODE` | `EUC_CN`
`utf_8_to_euc_jp` | `UNICODE` | `EUC_JP`
`utf_8_to_euc_kr` | `UNICODE` | `EUC_KR`
`utf_8_to_euc_tw` | `UNICODE` | `EUC_TW`
`utf_8_to_gb18030` | `UNICODE` | `GB18030`
`utf_8_to_gbk` | `UNICODE` | `GBK`
`utf_8_to_iso_8859_1` | `UNICODE` | `LATIN1`
`utf_8_to_iso_8859_10` | `UNICODE` | `LATIN6`
`utf_8_to_iso_8859_13` | `UNICODE` | `LATIN7`
`utf_8_to_iso_8859_14` | `UNICODE` | `LATIN8`
`utf_8_to_iso_8859_15` | `UNICODE` | `LATIN9`
`utf_8_to_iso_8859_16` | `UNICODE` | `LATIN10`
`utf_8_to_iso_8859_2` | `UNICODE` | `LATIN2`
`utf_8_to_iso_8859_3` | `UNICODE` | `LATIN3`
`utf_8_to_iso_8859_4` | `UNICODE` | `LATIN4`
`utf_8_to_iso_8859_5` | `UNICODE` | `ISO_8859_5`
`utf_8_to_iso_8859_6` | `UNICODE` | `ISO_8859_6`
`utf_8_to_iso_8859_7` | `UNICODE` | `ISO_8859_7`
`utf_8_to_iso_8859_8` | `UNICODE` | `ISO_8859_8`
`utf_8_to_iso_8859_9` | `UNICODE` | `LATIN5`
`utf_8_to_johab` | `UNICODE` | `JOHAB`
`utf_8_to_koi8_r` | `UNICODE` | `KOI8`
`utf_8_to_sjis` | `UNICODE` | `SJIS`
`utf_8_to_tcvn` | `UNICODE` | `TCVN`
`utf_8_to_uhc` | `UNICODE` | `UHC`
`utf_8_to_windows_1250` | `UNICODE` | `WIN1250`
`utf_8_to_windows_1251` | `UNICODE` | `WIN`
`utf_8_to_windows_1256` | `UNICODE` | `WIN1256`
`utf_8_to_windows_866` | `UNICODE` | `ALT`
`utf_8_to_windows_874` | `UNICODE` | `WIN874`
`windows_1250_to_iso_8859_2` | `WIN1250` | `LATIN2`
`windows_1250_to_mic` | `WIN1250` | `MULE_INTERNAL`
`windows_1250_to_utf_8` | `WIN1250` | `UNICODE`
`windows_1251_to_iso_8859_5` | `WIN` | `ISO_8859_5`
`windows_1251_to_koi8_r` | `WIN` | `KOI8`
`windows_1251_to_mic` | `WIN` | `MULE_INTERNAL`
`windows_1251_to_utf_8` | `WIN` | `UNICODE`
`windows_1251_to_windows_866` | `WIN` | `ALT`
`windows_1256_to_utf_8` | `WIN1256` | `UNICODE`
`windows_866_to_iso_8859_5` | `ALT` | `ISO_8859_5`
`windows_866_to_koi8_r` | `ALT` | `KOI8`
`windows_866_to_mic` | `ALT` | `MULE_INTERNAL`
`windows_866_to_utf_8` | `ALT` | `UNICODE`
`windows_866_to_windows_1251` | `ALT` | `WIN`
`windows_874_to_utf_8` | `WIN874` | `UNICODE`
注意: a. 変換名は、標準命名体系に従っています。 英数字以外の文字がアンダースコアで置換された変換前コードの公式名称の後ろに`_to_`が付けられ、その後に、同等に処理された変換後のコード名が続きます。 従って、これらの名称は、慣習的なコード名とは異なる可能性があります。

前のページ | ホーム | 次のページ
算術関数と演算子 | 上に戻る | バイナリ列関数と演算子