PostgreSQL 字符串函数

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()代表带分隔符连接,是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的长度,以字节为单位。多字节字符被计算为多个字节。这意味着对于包含5个双字节字符的字符串,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替换的结果。在搜索from_str时,REPLACE()是区分大小写的。

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参数的形式返回从位置pos开始长度为len的字符串str的子字符串。使用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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程