目录
以下是 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('foo@bar.com', '(.+)@(.+)'); -- {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中快速检索相关函数