他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

4.4. 文字列関数と演算子

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

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

Table 4-6. SQL 文字列関数と演算子

関数返り値型説明結果
string || string text 文字列結合 'Postgre' || 'SQL'PostgreSQL
bit_length(string)integernumber of bits in stringbit_length('jose')32
char_length(string) or character_length(string)integer 文字列の中の文字数 char_length('jose')4
lower(string)text文字列を小文字に変換lower('TOM')tom
octet_length(string)integer文字列のバイト数octet_length('jose')4
position(substring in string)integer指定した二次文字列(文字列の中の文字列)の位置position('om' in 'Thomas')3
substring(string [from integer] [for integer])text 二次文字列の取り出し substring('Thomas' from 2 for 3)hom
trim([leading | trailing | both] [characters] from string)text (デフォルトではスペースの) characters で指定された文字のみを含む最も長い文字列を string の最初、最後、そして両側から削除します。trim(both 'x' from 'xTomxx')Tom
upper(string)text文字列を大文字に変換upper('tom')TOM

このほか以下に列挙する文字列操作関数が使えます。その幾つかは上で説明した SQL 標準文字列関数を実装する目的で内部的に使用されます。

Table 4-7. その他の文字列関数

関数返り値型説明結果
ascii(text)integer引数の第一文字を ASCII コードで返します。ascii('x')120
btrim(string text, trim text)text trim で指定された文字のみを有する最長の文字列を 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
initcap(text)text(空白で区切られた)それぞれの単語の第一文字を大文字にします。initcap('hi thomas')Hi Thomas
length(string)integer 文字列の長さ length('jose')4
lpad(string text, length integer [, fill text])text 文字 fill (デフォルトはスペース)を文字列のに追加して stringlength の長さにします。string が既に length の長さを越えている場合は(右側が)切り捨てられます。 lpad('hi', 5, 'xy')xyxhi
ltrim(string text, trim text)text 文字列の最初から trim で指定された文字を有する最長の文字列を削除します。ltrim('zzzytrim','xyz')trim
pg_client_encoding()name 現在のクライアントの符号化方式の名前を返します。pg_client_encoding()SQL_ASCII
repeat(text, integer)textRepeat text a number of times.repeat('Pg', 4)PgPgPgPg
rpad(string text, length integer [, fill text])text 文字 fill (デフォルトはスペース)を文字列のに追加して stringlength の長さにします。string が既に length の長さを越えている場合は切り捨てられます。 rpad('hi', 5, 'xy')hixyx
rtrim(string text, trim text)text 文字列の最後から trim で指定された文字を有する最長の文字列を削除します。rtrim('trimxxxx','x')trim
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マルチバイト符号化方式のテキストを ASCII に変換します。to_ascii('Karel')Karel
translate(string text, from text, to text)text from で指定された文字と一致する string にあるすべての文字は、それに対応する to で指定された文字に置き換えられます。translate('12345', '14', 'ax')a23x5
encode(data bytea, type text)text バイナリデータを ASCII のみの表現に符号化します。サポートされている型は 'base64'、'hex'、'escape' です。encode('123\\000\\001', 'base64')MTIzAAE=
decode(string text, type text)bytea 以前に encode() で符号化された string からバイナリデータを復号します。パラメータの型は encode() と同じです。decode('MTIzAAE=', 'base64')123\000\001

to_ascii 関数は LATIN1、LATIN2、WIN1250 (CP1250)からのみ変換をサポートします。