PostgreSQL 8.2.3 中文文檔
後退快退章9. 函數和操作符快進前進

9.4. 字符串函數和操作符

本節描述了用於檢查和操作字符串數值的函數和操作符。在這個環境中的字符串包括所有 character, character varying, text 類型的值。除非另外說明,所有下麵列出的函數都可以處理這些類型,不過要小心的是,在使用 character 類型的時候,需要注意自動填充的潛在影響。通常這裡描述的函數也能用於非字符串類型,我們隻要先把那些數據轉化為字符串表現形式就可以了。有些函數還可以處理位串類型。

SQL 定義了一些字符串函數,它們有指定的語法(用特定的關鍵字而不是逗號來分隔參數)。詳情請見表9-5,這些函數也用正常的函數調用語法實現了(參閱表9-6)。

表9-5. SQL 字符串函數和操作符

函數返回類型描述例子結果
string || stringtext字符串連接'Post' || 'greSQL'PostgreSQL
bit_length(string)int字符串裡二進製位的個數bit_length('jose')32
char_length(string)character_length(string)int字符串中的字符個數char_length('jose')4
convert(string using conversion_name)text使用指定的轉換名字改變編碼。轉換可以通過 CREATE CONVERSION 定義。當然係統裡有一些預定義的轉換名字。參閱表9-7獲取可用的轉換名。convert('PostgreSQL' using iso_8859_1_to_utf8)UTF8編碼的 'PostgreSQL'
lower(string)text把字符串轉化為小寫lower('TOM')tom
octet_length(string)int字符串中的字節數octet_length('jose')4
overlay(string placing string from int [for int])text替換子字符串overlay('Txxxxas' placing 'hom' from 2 for 4)Thomas
position(substring in string)int指定的子字符串的位置position('om' in 'Thomas')3
substring(string [from int] [for int])text抽取子字符串substring('Thomas' from 2 for 3)hom
substring(string from pattern)text抽取匹配 POSIX 正則表達式的子字符串。參見節9.7獲取更多關於模式匹配的信息。substring('Thomas' from '...$')mas
substring(string from pattern for escape)text抽取匹配 SQL 正則表達式的子字符串。參見節9.7獲取更多關於模式匹配的信息。substring('Thomas' from '%#"o_a#"_' for '#')oma
trim([leading | trailing | both] [characters] from string)text從字符串 string 的開頭/結尾/兩邊刪除隻包含 characters 中字符(缺省是一個空白)的最長的字符串trim(both 'x' from 'xTomxx')Tom
upper(string)text把字符串轉化為大寫upper('tom')TOM

還有額外的字符串操作函數可以用,它們在表9-6列出。它們有些在內部用於實現表9-5列出的 SQL 標準字符串函數。

表9-6. 其它字符串函數

函數返回類型描述例子結果
ascii(string)int參數第一個字符的 ASCII 碼ascii('x')120
btrim(string text [, characters text])textstring 開頭和結尾刪除隻包含 characters 中字符(缺省是空白)的最長字符串btrim('xyxtrimyyx', 'xy')trim
chr(int)text給出 ASCII 碼的字符chr(65)A
convert(string text, [src_encoding name,] dest_encoding name)text把原來編碼為 src_encoding 的字符串轉換為 dest_encoding 編碼(如果省略了 src_encoding 將使用數據庫編碼)convert( 'text_in_utf8', 'UTF8', 'LATIN1')以ISO 8859-1編碼表示的 text_in_utf8
decode(string text, type text)bytea把早先用 encode 編碼的 string 裡麵的二進製數據解碼。參數類型和 encode 相同。decode('MTIzAAE=', 'base64')123\000\001
encode(data bytea, type text)text把二進製數據編碼為隻包含 ASCII 形式的數據。支持的類型有:base64, hex, escapeencode( E'123\\000\\001', 'base64')MTIzAAE=
initcap(string)text把每個單詞的第一個子母轉為大寫,其它的保留小寫。單詞是一係列字母數字組成的字符,用非字母數字分隔。initcap('hi THOMAS')Hi Thomas
length(string)intstring 中字符的數目length('jose')4
lpad(string text, length int [, 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計算 string 的MD5散列,以十六進製返回結果。md5('abc')900150983cd24fb0 d6963f7d28e17f72
pg_client_encoding()name當前客戶端編碼名稱pg_client_encoding()SQL_ASCII
quote_ident(string)text返回適用於 SQL 語句的標識符形式(使用適當的引號進行界定)。隻有在必要的時候才會添加引號(字符串包含非標識符字符或者會轉換大小寫的字符)。嵌入的引號被恰當地寫了雙份。quote_ident('Foo bar')"Foo bar"
quote_literal(string)text返回適用於在 SQL 語句裡當作文本使用的形式。嵌入的引號和反斜杠被恰當地寫了雙份。quote_literal( 'O\'Reilly')'O''Reilly'
regexp_replace(string text, pattern text, replacement text [,flags text])text替換匹配 POSIX 正則表達式的子字符串。參見節9.7以獲取更多模式匹配的信息。regexp_replace('Thomas', '.[mN]a.', 'M')ThM
repeat(string text, number int)textstring 重複 numberrepeat('Pg', 4)PgPgPgPg
replace(string text, from text, to text)text把字符串 string 裡出現地所有子字符串 from 替換成子字符串 toreplace( 'abcdefabcdef', 'cd', 'XX')abXXefabXXef
rpad(string text, length int [, 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 int)text根據 delimiter 分隔 string 返回生成的第 field 個子字符串(1為基)。split_part('abc~@~def~@~ghi', '~@~', 2)def
strpos(string, substring)int指定的子字符串的位置。和 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(string text [, encoding text])textstring 從其它編碼轉換為 ASCII (僅支持 LATIN1, LATIN2, LATIN9, WIN1250 編碼)。to_ascii('Karel')Karel
to_hex(number intbigint)textnumber 轉換成十六進製表現形式to_hex(2147483647)7fffffff
translate(string text, from text, to text)text把在 string 中包含的任何匹配 from 中字符的字符轉化為對應的在 to 中的字符translate('12345', '14', 'ax')a23x5

表9-7. 內置的轉換

轉換名[a]源編碼目的編碼
ascii_to_micSQL_ASCIIMULE_INTERNAL
ascii_to_utf8SQL_ASCIIUTF8
big5_to_euc_twBIG5EUC_TW
big5_to_micBIG5MULE_INTERNAL
big5_to_utf8BIG5UTF8
euc_cn_to_micEUC_CNMULE_INTERNAL
euc_cn_to_utf8EUC_CNUTF8
euc_jp_to_micEUC_JPMULE_INTERNAL
euc_jp_to_sjisEUC_JPSJIS
euc_jp_to_utf8EUC_JPUTF8
euc_kr_to_micEUC_KRMULE_INTERNAL
euc_kr_to_utf8EUC_KRUTF8
euc_tw_to_big5EUC_TWBIG5
euc_tw_to_micEUC_TWMULE_INTERNAL
euc_tw_to_utf8EUC_TWUTF8
gb18030_to_utf8GB18030UTF8
gbk_to_utf8GBKUTF8
iso_8859_10_to_utf8LATIN6UTF8
iso_8859_13_to_utf8LATIN7UTF8
iso_8859_14_to_utf8LATIN8UTF8
iso_8859_15_to_utf8LATIN9UTF8
iso_8859_16_to_utf8LATIN10UTF8
iso_8859_1_to_micLATIN1MULE_INTERNAL
iso_8859_1_to_utf8LATIN1UTF8
iso_8859_2_to_micLATIN2MULE_INTERNAL
iso_8859_2_to_utf8LATIN2UTF8
iso_8859_2_to_windows_1250LATIN2WIN1250
iso_8859_3_to_micLATIN3MULE_INTERNAL
iso_8859_3_to_utf8LATIN3UTF8
iso_8859_4_to_micLATIN4MULE_INTERNAL
iso_8859_4_to_utf8LATIN4UTF8
iso_8859_5_to_koi8_rISO_8859_5KOI8
iso_8859_5_to_micISO_8859_5MULE_INTERNAL
iso_8859_5_to_utf8ISO_8859_5UTF8
iso_8859_5_to_windows_1251ISO_8859_5WIN1251
iso_8859_5_to_windows_866ISO_8859_5WIN866
iso_8859_6_to_utf8ISO_8859_6UTF8
iso_8859_7_to_utf8ISO_8859_7UTF8
iso_8859_8_to_utf8ISO_8859_8UTF8
iso_8859_9_to_utf8LATIN5UTF8
johab_to_utf8JOHABUTF8
koi8_r_to_iso_8859_5KOI8ISO_8859_5
koi8_r_to_micKOI8MULE_INTERNAL
koi8_r_to_utf8KOI8UTF8
koi8_r_to_windows_1251KOI8WIN1251
koi8_r_to_windows_866KOI8WIN866
mic_to_asciiMULE_INTERNALSQL_ASCII
mic_to_big5MULE_INTERNALBIG5
mic_to_euc_cnMULE_INTERNALEUC_CN
mic_to_euc_jpMULE_INTERNALEUC_JP
mic_to_euc_krMULE_INTERNALEUC_KR
mic_to_euc_twMULE_INTERNALEUC_TW
mic_to_iso_8859_1MULE_INTERNALLATIN1
mic_to_iso_8859_2MULE_INTERNALLATIN2
mic_to_iso_8859_3MULE_INTERNALLATIN3
mic_to_iso_8859_4MULE_INTERNALLATIN4
mic_to_iso_8859_5MULE_INTERNALISO_8859_5
mic_to_koi8_rMULE_INTERNALKOI8
mic_to_sjisMULE_INTERNALSJIS
mic_to_windows_1250MULE_INTERNALWIN1250
mic_to_windows_1251MULE_INTERNALWIN1251
mic_to_windows_866MULE_INTERNALWIN866
sjis_to_euc_jpSJISEUC_JP
sjis_to_micSJISMULE_INTERNAL
sjis_to_utf8SJISUTF8
tcvn_to_utf8WIN1258UTF8
uhc_to_utf8UHCUTF8
utf8_to_asciiUTF8SQL_ASCII
utf8_to_big5UTF8BIG5
utf8_to_euc_cnUTF8EUC_CN
utf8_to_euc_jpUTF8EUC_JP
utf8_to_euc_krUTF8EUC_KR
utf8_to_euc_twUTF8EUC_TW
utf8_to_gb18030UTF8GB18030
utf8_to_gbkUTF8GBK
utf8_to_iso_8859_1UTF8LATIN1
utf8_to_iso_8859_10UTF8LATIN6
utf8_to_iso_8859_13UTF8LATIN7
utf8_to_iso_8859_14UTF8LATIN8
utf8_to_iso_8859_15UTF8LATIN9
utf8_to_iso_8859_16UTF8LATIN10
utf8_to_iso_8859_2UTF8LATIN2
utf8_to_iso_8859_3UTF8LATIN3
utf8_to_iso_8859_4UTF8LATIN4
utf8_to_iso_8859_5UTF8ISO_8859_5
utf8_to_iso_8859_6UTF8ISO_8859_6
utf8_to_iso_8859_7UTF8ISO_8859_7
utf8_to_iso_8859_8UTF8ISO_8859_8
utf8_to_iso_8859_9UTF8LATIN5
utf8_to_johabUTF8JOHAB
utf8_to_koi8_rUTF8KOI8
utf8_to_sjisUTF8SJIS
utf8_to_tcvnUTF8WIN1258
utf8_to_uhcUTF8UHC
utf8_to_windows_1250UTF8WIN1250
utf8_to_windows_1251UTF8WIN1251
utf8_to_windows_1252UTF8WIN1252
utf8_to_windows_1253UTF8WIN1253
utf8_to_windows_1254UTF8WIN1254
utf8_to_windows_1255UTF8WIN1255
utf8_to_windows_1256UTF8WIN1256
utf8_to_windows_1257UTF8WIN1257
utf8_to_windows_866UTF8WIN866
utf8_to_windows_874UTF8WIN874
windows_1250_to_iso_8859_2WIN1250LATIN2
windows_1250_to_micWIN1250MULE_INTERNAL
windows_1250_to_utf8WIN1250UTF8
windows_1251_to_iso_8859_5WIN1251ISO_8859_5
windows_1251_to_koi8_rWIN1251KOI8
windows_1251_to_micWIN1251MULE_INTERNAL
windows_1251_to_utf8WIN1251UTF8
windows_1251_to_windows_866WIN1251WIN866
windows_1252_to_utf8WIN1252UTF8
windows_1256_to_utf8WIN1256UTF8
windows_866_to_iso_8859_5WIN866ISO_8859_5
windows_866_to_koi8_rWIN866KOI8
windows_866_to_micWIN866MULE_INTERNAL
windows_866_to_utf8WIN866UTF8
windows_866_to_windows_1251WIN866WIN
windows_874_to_utf8WIN874UTF8
【注意】a.
轉換名遵循一個標準的命名模式:將源編碼中的所有非字母數字字符用下劃線替換,後麵跟著 _to_ ,然後後麵再跟著經過同樣處理的目標編碼的名字。因此這些名字可能和客戶的編碼名字不同。

後退首頁前進
數學函數和操作符上一級二進製字符串函數和操作符