- PostgreSQL 教程
- PostgreSQL - 首页
- PostgreSQL - 概述
- PostgreSQL - 环境设置
- PostgreSQL - 语法
- PostgreSQL - 数据类型
- PostgreSQL - 创建数据库
- PostgreSQL - 选择数据库
- PostgreSQL - 删除数据库
- PostgreSQL - 创建表
- PostgreSQL - 删除表
- PostgreSQL - 模式
- PostgreSQL - 插入查询
- PostgreSQL - 选择查询
- PostgreSQL - 运算符
- PostgreSQL - 表达式
- PostgreSQL - WHERE 子句
- PostgreSQL - AND & OR 子句
- PostgreSQL - 更新查询
- PostgreSQL - 删除查询
- PostgreSQL - LIKE 子句
- PostgreSQL - LIMIT 子句
- PostgreSQL - ORDER BY 子句
- PostgreSQL - GROUP BY
- PostgreSQL - WITH 子句
- PostgreSQL - HAVING 子句
- PostgreSQL - DISTINCT 关键字
- 高级 PostgreSQL
- PostgreSQL - 约束
- PostgreSQL - 连接
- PostgreSQL - UNION 子句
- PostgreSQL - NULL 值
- PostgreSQL - 别名语法
- PostgreSQL - 触发器
- PostgreSQL - 索引
- PostgreSQL - ALTER TABLE 命令
- TRUNCATE TABLE 命令
- PostgreSQL - 视图
- PostgreSQL - 事务
- PostgreSQL - 锁
- PostgreSQL - 子查询
- PostgreSQL - 自动递增
- PostgreSQL - 权限
- 日期/时间函数 & 运算符
- PostgreSQL - 函数
- PostgreSQL - 常用函数
- PostgreSQL 接口
- PostgreSQL - C/C++
- PostgreSQL - Java
- PostgreSQL - PHP
- PostgreSQL - Perl
- PostgreSQL - Python
- PostgreSQL 有用资源
- PostgreSQL - 快速指南
- PostgreSQL - 有用资源
- 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() 代表 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)