PostgreSQL - 字符串函数

PostgreSQL 字符串函数主要用于字符串操作。 下表详细介绍了重要的字符串函数 −

S. No. Name & Description
1 ASCII()

返回最左边字符的数值

2 BIT_LENGTH()

返回参数的长度(以 bits 位为单位)

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)

Returns the length of the string str in bits.

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() is a synonym for 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_MATCHES(string text, pattern text [, flags text]) 函数执行 expr 与模式的模式匹配。 如果 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 参数的表单从位置 pos 开始的字符串 str 返回一个子字符串。 带有 len 参数的表单从字符串 str 返回一个子字符串 len 个字符,从位置 pos 开始。 使用 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)

返回删除所有 remstr 前缀或后缀的字符串 str。 如果没有给出任何说明符 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() is a synonym for UPPER().


UPPER(str)

根据当前字符集映射,返回所有字符都变为大写的字符串 str。

testdb=# SELECT UPPER('manisha');
  upper
---------
 MANISHA
(1 row)

❮ PostgreSQL 实用函数