PostgreSQL - 字串函式



PostgreSQL 字串函式主要用於字串操作。下表詳細介紹了重要的字串函式:

序號 名稱 & 描述
1 ASCII()

返回最左側字元的數字值

2 BIT_LENGTH()

返回引數的位元長度

3 CHAR_LENGTH()

返回引數中的字元數

4 CHARACTER_LENGTH()

CHAR_LENGTH() 的同義詞

5 CONCAT_WS()

返回帶分隔符的連線字串

6 CONCAT()

返回連線後的字串

7 LCASE()

LOWER() 的同義詞

8 LEFT()

返回指定的最左側字元數

9 LENGTH()

返回字串的位元組長度

10 LOWER()

返回引數的小寫形式

11 LPAD()

返回字串引數,用指定的字串左填充

12 LTRIM()

刪除前導空格

13 MID()

返回從指定位置開始的子字串

14 POSITION()

LOCATE() 的同義詞

15 QUOTE()

轉義引數以供 SQL 語句使用

16 REGEXP

使用正則表示式進行模式匹配

17 REPEAT()

重複字串指定次數

18 REPLACE()

替換指定字串的出現次數

19 REVERSE()

反轉字串中的字元

20 RIGHT()

返回指定的最右側字元數

21 RPAD()

追加字串指定次數

22 RTRIM()

刪除尾隨空格

24 SUBSTRING(), SUBSTR()

返回指定的子字串

25 TRIM()

刪除前導和尾隨空格

26 UCASE()

UPPER() 的同義詞

27 UPPER()

轉換為大寫

ASCII(str)

返回字串 str 最左側字元的數字值。如果 str 為空字串,則返回 0。如果 str 為 NULL,則返回 NULL。ASCII() 適用於數字值為 0 到 255 的字元。

testdb=# SELECT ASCII('2');
+---------------------------------------------------------+
| ASCII('2')                                              |
+---------------------------------------------------------+
| 50                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

testdb=# SELECT ASCII('dx');
+---------------------------------------------------------+
| ASCII('dx')                                             |
+---------------------------------------------------------+
| 100                                                     |
+---------------------------------------------------------+
1 row in set (0.00 sec)

BIT_LENGTH(str)

返回字串 str 的位元長度。

testdb=# SELECT BIT_LENGTH('text');
+---------------------------------------------------------+
| BIT_LENGTH('text')                                      |
+---------------------------------------------------------+
| 32                                                      |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CHAR_LENGTH(str)

返回字串 str 的長度(以字元為單位)。多位元組字元算作單個字元。這意味著對於包含五個雙位元組字元的字串,LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。

testdb=# SELECT CHAR_LENGTH('text');
+---------------------------------------------------------+
| CHAR_LENGTH('text')                                     |
+---------------------------------------------------------+
| 4                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CHARACTER_LENGTH(str)

CHARACTER_LENGTH() 是 CHAR_LENGTH() 的同義詞。

CONCAT(str1,str2,...)

返回連線引數後得到的字串。它可以有一個或多個引數。如果所有引數都是非二進位制字串,則結果是非二進位制字串。如果引數包含任何二進位制字串,則結果是二進位制字串。數字引數將轉換為其等效的二進位制字串形式;如果要避免這種情況,可以使用顯式型別轉換,例如:

testdb=# SELECT CONCAT('My', 'S', 'QL');
+---------------------------------------------------------+
| CONCAT('My', 'S', 'QL')                                 |
+---------------------------------------------------------+
| MySQL                                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

CONCAT_WS(separator,str1,str2,...)

CONCAT_WS() 代表 Concatenate With Separator,是 CONCAT() 的特殊形式。第一個引數是其餘引數的分隔符。分隔符將新增到要連線的字串之間。分隔符可以是字串,其餘引數也可以是字串。如果分隔符為 NULL,則結果為 NULL。

testdb=# SELECT CONCAT_WS(',','First name','Last Name' );
+---------------------------------------------------------+
| CONCAT_WS(',','First name','Last Name' )                |
+---------------------------------------------------------+
| First name, Last Name                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LCASE(str)

LCASE() 是 LOWER() 的同義詞。

LEFT(str,len)

返回字串 str 從最左側開始的 len 個字元,如果任何引數為 NULL,則返回 NULL。

testdb=# SELECT LEFT('foobarbar', 5);
+---------------------------------------------------------+
| LEFT('foobarbar', 5)                                    |
+---------------------------------------------------------+
| fooba                                                   |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LENGTH(str)

返回字串 str 的長度(以位元組為單位)。多位元組字元算作多個位元組。這意味著對於包含五個雙位元組字元的字串,LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。

testdb=# SELECT LENGTH('text');
+---------------------------------------------------------+
| LENGTH('text')                                          |
+---------------------------------------------------------+
| 4                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LOWER(str)

返回字串 str,其中所有字元都根據當前字元集對映更改為小寫。

testdb=# SELECT LOWER('QUADRATICALLY');
+---------------------------------------------------------+
| LOWER('QUADRATICALLY')                                  |
+---------------------------------------------------------+
| quadratically                                           |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LPAD(str,len,padstr)

返回字串 str,用字串 padstr 左填充到長度為 len 個字元。如果 str 長於 len,則返回值將縮短為 len 個字元。

testdb=# SELECT LPAD('hi',4,'??');
+---------------------------------------------------------+
| LPAD('hi',4,'??')                                       |
+---------------------------------------------------------+
| ??hi                                                    |
+---------------------------------------------------------+
1 row in set (0.00 sec)

LTRIM(str)

返回字串 str,刪除了前導空格字元。

testdb=# SELECT LTRIM('  barbar');
+---------------------------------------------------------+
| LTRIM('  barbar')                                       |
+---------------------------------------------------------+
| barbar                                                  |
+---------------------------------------------------------+
1 row in set (0.00 sec)

MID(str,pos,len)

MID(str,pos,len) 是 SUBSTRING(str,pos,len) 的同義詞。

POSITION(substr IN str)

POSITION(substr IN str) 是 LOCATE(substr,str) 的同義詞。

QUOTE_IDENT(string text), QUOTE_LITERAL(string text), QUOTE_LITERAL(value anyelement), QUOTE_NULLABLE(value anyelement)

所有這些函式都返回給定的字串,該字串適當地加引號以用作 SQL 語句字串中的識別符號。在函式 QUOTE_IDENT 中,僅在必要時新增引號。在函式 QUOTE_LITERAL 中,嵌入的單引號和反斜槓正確地加倍。如果傳遞了一個值,則將給定值強制轉換為文字,然後將其加引號作為文字。函式 QUOTE_NULLABLE 將給定值強制轉換為文字,然後將其加引號作為文字;或者,如果引數為 null,則返回 NULL。

以下是所有這些函式的示例:

testdb=# SELECT QUOTE_IDENT('Foo bar');
 quote_ident
-------------
 "Foo bar"
(1 row)


testdb=# SELECT QUOTE_LITERAL(E'O\'Reilly');
 quote_literal
---------------
 'O''Reilly'
(1 row)


testdb=# SELECT QUOTE_LITERAL(42.5);
 quote_literal
---------------
 '42.5'
(1 row)


testdb=# SELECT QUOTE_NULLABLE(42.5);
 quote_nullable
----------------
 '42.5'
(1 row)

expr REGEXP pattern

REGEXP_MATCHES(string text, pattern text [, flags text]) 函式執行 expr 與 pattern 的模式匹配。如果 expr 匹配 pat,則返回 1;否則返回 0。如果 expr 或 pat 為 NULL,則結果為 NULL。REGEXP_MATCHES 不區分大小寫,除非用於二進位制字串。

REGEXP_REPLACE(string text, pattern text, replacement text [, flags text]) 函式替換與 POSIX 正則表示式匹配的子字串。

REGEXP_SPLIT_TO_ARRAY(string text, pattern text [, flags text ]), 使用 POSIX 正則表示式作為分隔符拆分字串。

REGEXP_SPLIT_TO_TABLE(string text, pattern text [, flags text]), 使用 POSIX 正則表示式作為分隔符拆分字串。

以下是所有這些函式的示例:

testdb=# SELECT REGEXP_MATCHES('ABCDEF','A%C%%');
 regexp_matches
----------------
(0 rows)


testdb=# SELECT REGEXP_REPLACE('Thomas', '.[mN]a.', 'M');
 regexp_replace
----------------
 ThM
(1 row)


testdb=# SELECT REGEXP_SPLIT_TO_ARRAY('hello world', E'\\s+');
 regexp_split_to_array
-----------------------
 {hello,world}
(1 row)


testdb=# SELECT REGEXP_SPLIT_TO_TABLE('hello world', E'\\s+');
 regexp_split_to_table
-----------------------
 hello
 world
(2 rows)

REPEAT(str,count)

返回一個字串,該字串由字串 str 重複 count 次組成。如果 count 小於 1,則返回空字串。如果 str 或 count 為 NULL,則返回 NULL。

testdb=# SELECT REPEAT('SQL', 3);
   repeat
-----------
 SQLSQLSQL
(1 row)

REPLACE(str,from_str,to_str)

返回字串 str,其中所有出現的字串 from_str 都被字串 to_str 替換。REPLACE() 在搜尋 from_str 時執行區分大小寫的匹配。

testdb=# SELECT REPLACE('www.mysql.com', 'w', 'Ww');
      replace
------------------
 WwWwWw.mysql.com
(1 row)

REVERSE(str)

返回字串 str,其中字元順序反轉。

testdb=# SELECT REVERSE('abcd');
 reverse
---------
 dcba
(1 row)

RIGHT(str,len)

返回字串 str 從最右側開始的 len 個字元,如果任何引數為 NULL,則返回 NULL。

testdb=# SELECT RIGHT('foobarbar', 4);
 right
-------
 rbar
(1 row)

RPAD(str,len,padstr)

返回字串 str,用字串 padstr 右填充到長度為 len 個字元。如果 str 長於 len,則返回值將縮短為 len 個字元。

testdb=# SELECT RPAD('hi',5,'?');
 rpad
-------
 hi???
(1 row)

RTRIM(str)

返回字串 str,刪除了尾隨空格字元。

testdb=# SELECT RTRIM('barbar   ');
 rtrim
--------
 barbar
(1 row)

SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)

不帶 len 引數的形式返回從字串 str 的位置 pos 開始的子字串。帶 len 引數的形式返回從字串 str 的位置 pos 開始的長度為 len 個字元的子字串。使用 FROM 的形式是標準 SQL 語法。也可以對 pos 使用負值。在這種情況下,子字串的開頭是從字串末尾開始的 pos 個字元,而不是開頭。在任何形式的此函式中,都可以對 pos 使用負值。

testdb=# SELECT SUBSTRING('Quadratically',5);
 substring
-----------
 ratically
(1 row)


testdb=# SELECT SUBSTRING('foobarbar' FROM 4);
 substring
-----------
 barbar
(1 row)


testdb=# SELECT SUBSTRING('Quadratically',5,6);
 substring
-----------
 ratica
(1 row)

TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)

返回字串 str,刪除了所有 remstr 字首或字尾。如果沒有給出 BOTH、LEADING 或 TRAILING 中的任何一個說明符,則假定為 BOTH。remstr 是可選的,如果未指定,則刪除空格。

testdb=# SELECT TRIM('  bar   ');
 btrim
-------
 bar
(1 row)


testdb=# SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
 ltrim
--------
 barxxx
(1 row)


testdb=# SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
 btrim
-------
 bar
(1 row)


testdb=# SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
 rtrim
-------
 bar
(1 row)

UCASE(str)

UCASE() 是 UPPER() 的同義詞。

UPPER(str)

返回字串 str,其中所有字元都根據當前字元集對映更改為大寫。

testdb=# SELECT UPPER('manisha');
  upper
---------
 MANISHA
(1 row)
postgresql_useful_functions.htm
廣告

© . All rights reserved.