目录
以下是 PostgreSQL 中最全面的常用字符串函数列表,包含详细说明和示例:
一、基础字符串操作
-
||
(连接运算符)SELECT 'Hello' || ' ' || 'World'; -- 'Hello World'
-
CONCAT(str1, str2, ...)
支持 NULL 值(NULL 视为空字符串)
SELECT CONCAT('A', NULL, 'B'); -- 'AB'
-
CONCAT_WS(sep, str1, str2, ...)
带分隔符的连接(跳过 NULL)
SELECT CONCAT_WS('-', '2023', '10', NULL, '27'); -- '2023-10-27'
二、大小写转换
-
LOWER(str)
SELECT LOWER('PostgreSQL'); -- 'postgresql'
-
UPPER(str)
SELECT UPPER('case'); -- 'CASE'
-
INITCAP(str)
单词首字母大写
SELECT INITCAP('hello world'); -- 'Hello World'
三、空白处理
-
TRIM([LEADING|TRAILING|BOTH] [chars] FROM str)
SELECT TRIM(' space '); -- 'space' SELECT TRIM(LEADING '0' FROM '000123'); -- '123'
-
LTRIM(str [, chars])
SELECT LTRIM('xxxSQL', 'x'); -- 'SQL'
-
RTRIM(str [, chars])
SELECT RTRIM('SQLxxx', 'x'); -- 'SQL'
四、子串提取
-
SUBSTRING(str FROM start [FOR length])
SELECT SUBSTRING('PostgreSQL' FROM 6 FOR 3); -- 'gre'
-
SUBSTR(str, start [, length])
SELECT SUBSTR('Database', 3, 4); -- 'taba'
-
LEFT(str, n)
SELECT LEFT('PostgreSQL', 4); -- 'Post'
-
RIGHT(str, n)
SELECT RIGHT('PostgreSQL', 3); -- 'SQL'
-
SPLIT_PART(str, delimiter, field)
SELECT SPLIT_PART('a,b,c', ',', 2); -- 'b'
五、搜索与定位
-
POSITION(substr IN str)
SELECT POSITION('QL' IN 'PostgreSQL'); -- 9
-
STRPOS(str, substr)
SELECT STRPOS('Database', 'ta'); -- 3
-
LENGTH(str)
/CHAR_LENGTH(str)
SELECT LENGTH('汉字'); -- 2 (字符数)
-
OCTET_LENGTH(str)
字节数计算
SELECT OCTET_LENGTH('汉字'); -- 6 (UTF-8)
六、字符串修改
-
REPLACE(str, from, to)
SELECT REPLACE('foo bar bar', 'bar', 'baz'); -- 'foo baz baz'
-
OVERLAY(str PLACING new FROM start [FOR length])
SELECT OVERLAY('xxxxSQL' PLACING 'Postgre' FROM 1 FOR 4); -- 'PostgreSQL'
-
REPEAT(str, count)
SELECT REPEAT('A', 3); -- 'AAA'
-
REVERSE(str)
SELECT REVERSE('SQL'); -- 'LQS'
七、填充与格式化
-
LPAD(str, length [, fill])
SELECT LPAD('7', 3, '0'); -- '007'
-
RPAD(str, length [, fill])
SELECT RPAD('Hi', 5, '!'); -- 'Hi!!!'
-
TO_CHAR(value, format)
格式化数字/日期为字符串
SELECT TO_CHAR(123.45, '999D99'); -- '123.45'
八、编码转换
-
ASCII(char)
SELECT ASCII('A'); -- 65
-
CHR(code)
SELECT CHR(65); -- 'A'
-
ENCODE(data, format)
SELECT ENCODE('text'::bytea, 'base64'); -- 'dGV4dA=='
-
DECODE(str, format)
SELECT DECODE('dGV4dA==', 'base64'); -- \x74657874 (bytea)
九、正则表达式(高级匹配)
-
REGEXP_MATCH(str, pattern)
SELECT REGEXP_MATCH('[email protected]', '(.+)@(.+)'); -- {foo,bar.com}
-
REGEXP_REPLACE(str, pattern, replace)
SELECT REGEXP_REPLACE('a1b2c3', '\d', 'X'); -- 'aXbXcX'
-
REGEXP_SPLIT_TO_ARRAY(str, pattern)
SELECT REGEXP_SPLIT_TO_ARRAY('apple,banana;orange', '[,;]'); -- {apple,banana,orange}
-
~
(正则匹配运算符)SELECT 'abc' ~ '^a'; -- true
十、其他实用函数
-
FORMAT(formatstr, ...)
SELECT FORMAT('Hello %s, your ID: %L', 'Alice', 'id-123'); -- 'Hello Alice, your ID: ''id-123'''
-
QUOTE_IDENT(str)
添加标准引号(用于标识符)
SELECT QUOTE_IDENT('user name'); -- "user name"
-
QUOTE_LITERAL(str)
添加标准引号(用于字符串)
SELECT QUOTE_LITERAL(E'O\'Reilly'); -- 'O''Reilly'
-
MD5(str)
SELECT MD5('password'); -- '5f4dcc3b5aa765d61d8327deb882cf99'
-
TRANSLATE(str, from, to)
字符级替换
SELECT TRANSLATE('12345', '143', 'ax'); -- 'a2x5' (1→a, 4→x, 3→空)
使用技巧:
- NULL 处理 :多数函数返回 NULL 当输入为 NULL(除
CONCAT
等特例) - 索引优化 :
LIKE 'prefix%'
可用索引,LIKE '%suffix'
不可用 - 正则性能:复杂正则可能影响性能,优先用简单字符串函数
- 多字节编码 :处理非 ASCII 字符时注意
LENGTH
与OCTET_LENGTH
区别
📌 完整函数列表参考:PostgreSQL 字符串函数文档
可通过
\df *string*
在psql
中快速检索相关函数