PostgreSQL String(字符串)函数
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 的字符。
jiyik_db=# SELECT ASCII('2');
+---------------------------------------------------------+
| ASCII('2') |
+---------------------------------------------------------+
| 50 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
jiyik_db=# SELECT ASCII('dx');
+---------------------------------------------------------+
| ASCII('dx') |
+---------------------------------------------------------+
| 100 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
BIT_LENGTH(str)
以位为单位返回字符串 str 的长度。
jiyik_db=# SELECT BIT_LENGTH('text');
+---------------------------------------------------------+
| BIT_LENGTH('text') |
+---------------------------------------------------------+
| 32 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
CHAR_LENGTH(str)
返回字符串 str 的长度,以字符为单位。多字节字符算作单个字符。这意味着对于包含五个两字节字符的字符串,LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。
jiyik_db=# 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,...)
返回由参数连接的字符串。它可能有一个或多个参数。如果所有参数都是非二进制字符串,则结果为非二进制字符串。如果参数包含任何二进制字符串,则结果为二进制字符串。数字参数被转换为其等效的二进制字符串形式;如果你想避免这种情况,你可以使用显式类型转换,如本例所示
jiyik_db=# 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() 的一种特殊形式。第一个参数是其余参数的分隔符。在要连接的字符串之间添加分隔符。
jiyik_db=# 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。
jiyik_db=# SELECT LEFT('foobarbar', 5);
+---------------------------------------------------------+
| LEFT('foobarbar', 5) |
+---------------------------------------------------------+
| fooba |
+---------------------------------------------------------+
1 row in set (0.00 sec)
LENGTH(str)
返回字符串 str 的长度,以字节为单位。多字节字符计为多个字节。这意味着对于包含五个两字节字符的字符串,LENGTH() 返回 10,而 CHAR_LENGTH() 返回 5。
jiyik_db=# SELECT LENGTH('text');
+---------------------------------------------------------+
| LENGTH('text') |
+---------------------------------------------------------+
| 4 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
LOWER(str)
将参数 str 的字符串中的字符(不管大小写)都转换为小写的字符,将转换后的字符串返回。
jiyik_db=# SELECT LOWER('QUADRATICALLY');
+---------------------------------------------------------+
| LOWER('QUADRATICALLY') |
+---------------------------------------------------------+
| quadratically |
+---------------------------------------------------------+
1 row in set (0.00 sec)
LPAD(str,len,padstr)
返回字符串 str,用字符串 padstr 左填充,长度为 len 个字符。如果 str 比 len 长,则返回值将缩短为 len 个字符。
jiyik_db=# SELECT LPAD('hi',4,'??');
+---------------------------------------------------------+
| LPAD('hi',4,'??') |
+---------------------------------------------------------+
| ??hi |
+---------------------------------------------------------+
1 row in set (0.00 sec)
LTRIM(str)
返回去除了前导空格字符的字符串 str。
jiyik_db=# 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_NULLABLE 函数将给定的值强制转换为文本,然后将其作为文字引用;或者,如果参数为空,则返回 NULL。
以下是所有这些函数的示例
jiyik_db=# SELECT QUOTE_IDENT('Foo bar');
quote_ident
-------------
"Foo bar"
(1 row)
jiyik_db=# SELECT QUOTE_LITERAL(E'O\'Reilly');
quote_literal
---------------
'O''Reilly'
(1 row)
jiyik_db=# SELECT QUOTE_LITERAL(42.5);
quote_literal
---------------
'42.5'
(1 row)
jiyik_db=# SELECT QUOTE_NULLABLE(42.5);
quote_nullable
----------------
'42.5'
(1 row)
expr REGEXP pattern
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正则表达式作为分隔符分割字符串。
以下是所有这些函数的示例
jiyik_db=# SELECT REGEXP_MATCHES('ABCDEF','A%C%%');
regexp_matches
----------------
(0 rows)
jiyik_db=# SELECT REGEXP_REPLACE('Thomas', '.[mN]a.', 'M');
regexp_replace
----------------
ThM
(1 row)
jiyik_db=# SELECT REGEXP_SPLIT_TO_ARRAY('hello world', E'\\s+');
regexp_split_to_array
-----------------------
{hello,world}
(1 row)
jiyik_db=# SELECT REGEXP_SPLIT_TO_TABLE('hello world', E'\\s+');
regexp_split_to_table
-----------------------
hello
world
(2 rows)
REPEAT(str,count)
返回由字符串 str 重复 count 次组成的字符串。如果计数小于 1,则返回一个空字符串。如果 str 或 count 为 NULL,则返回 NULL。
jiyik_db=# SELECT REPEAT('SQL', 3);
repeat
-----------
SQLSQLSQL
(1 row)
REPLACE(str,from_str,to_str)
返回字符串 str,其中所有出现的字符串 from_str 替换为字符串 to_str。REPLACE() 在搜索 from_str 时执行区分大小写的匹配。
jiyik_db=# SELECT REPLACE('www.mysql.com', 'w', 'Ww');
replace
------------------
WwWwWw.mysql.com
(1 row)
REVERSE(str)
返回字符顺序颠倒的字符串 str 。
jiyik_db=# SELECT REVERSE('abcd');
reverse
---------
dcba
(1 row)
RIGHT(str,len)
返回字符串 str 中最右边的 len 个字符,如果任何参数为 NULL,则返回 NULL。
jiyik_db=# SELECT RIGHT('foobarbar', 4);
right
-------
rbar
(1 row)
RPAD(str,len,padstr)
返回字符串 str,用字符串 padstr 右填充,长度为 len 个字符。如果 str 比 len 长,则返回值将缩短为 len 个字符。
jiyik_db=# SELECT RPAD('hi',5,'?');
rpad
-------
hi???
(1 row)
RTRIM(str)
返回删除了末尾空格字符的字符串 str。
jiyik_db=# 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。
jiyik_db=# SELECT SUBSTRING('Quadratically',5);
substring
-----------
ratically
(1 row)
jiyik_db=# SELECT SUBSTRING('foobarbar' FROM 4);
substring
-----------
barbar
(1 row)
jiyik_db=# 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 是可选的,如果未指定,则删除空格。
jiyik_db=# SELECT TRIM(' bar ');
btrim
-------
bar
(1 row)
jiyik_db=# SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
ltrim
--------
barxxx
(1 row)
jiyik_db=# SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
btrim
-------
bar
(1 row)
jiyik_db=# SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
rtrim
-------
bar
(1 row)
UCASE(str)
UCASE() 和 UPPER()函数的功能相同
UPPER(str)
将字符串str的所有字符(不管大小写)都转换成相应的大写字符,然后将转换后的字符串返回。
jiyik_db=# SELECT UPPER('manisha');
upper
---------
MANISHA
(1 row)