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)