PostgreSQL 内置函数
下面是一份超系统级的 PostgreSQL 内置函数大全(附分类 + 示例),覆盖 PostgreSQL 17 时代常用的所有函数类型,重点突出实际开发中最常使用的部分。
内容分为:
- 🧊 核心函数(必会)
- 🔧 字符串函数
- 🕒 日期与时间函数
- 🔢 数学函数
- 📦 聚合函数
- 🪞 窗口函数
- 🧬 JSON 函数
- 🧱 数组函数
- 🏗️ 类型转换函数
- 📚 系统信息函数
- 🔐 加密与哈希函数
- 🧩 网络与 IP 相关函数
- 🔀 其他特殊函数(正则、范围、几何)
返回第一个非 NULL 值。
SELECT COALESCE(null, null, 5, 9); -- 5
相等时返回 NULL。
SELECT NULLIF(10,10); -- NULL
SELECT GREATEST(5, 9, 1); -- 9
保留小数:
SELECT ROUND(123.456, 2); -- 123.46
SELECT '123'::int;
长度:
SELECT LENGTH('hello'); -- 5
SELECT LOWER('Hello'); -- hello
SELECT TRIM(' ab cd '); -- 'ab cd'
SELECT SUBSTRING('abcdef', 2, 3); -- 'bcd'
SELECT REPLACE('abcabc','a','X'); -- XbcXbc
SELECT POSITION('cd' IN 'abcde'); -- 3
SELECT 'a' || 'b'; -- ab
(聚合)
SELECT STRING_AGG(name, ',') FROM users;
REGEXP_MATCHES, REGEXP_REPLACE, REGEXP_SPLIT_TO_ARRAY
SELECT NOW();
SELECT CURRENT_TIMESTAMP;
SELECT CURRENT_DATE;
SELECT NOW() + INTERVAL '2 days';
SELECT EXTRACT(YEAR FROM NOW());
按年月日时区间截断:
SELECT DATE_TRUNC('month', NOW());
SELECT AGE('2025-01-01', '2000-01-01'); -- 25 years
SELECT FLOOR(RANDOM() * 100);
SELECT COUNT(*) FROM users;
SELECT AVG(age) FROM users;
SELECT ARRAY_AGG(id) FROM users;
SELECT ROW_NUMBER() OVER (ORDER BY id) FROM users;
SELECT LAG(amount) OVER (ORDER BY id) FROM orders;
累计求和:
SELECT SUM(amount) OVER (ORDER BY id) FROM orders;
SELECT data->'name' FROM users_json;
SELECT data->>'name'; -- text
SELECT jsonb '{"a":1}' || '{"b":2}';
SELECT jsonb_each(data) FROM users_json;
SELECT json_agg(u)
FROM (SELECT id,name FROM users LIMIT 3) u;
SELECT array_length(tags, 1) FROM articles;
SELECT unnest(tags) FROM articles;
SELECT '{1,2,3}'::int[] @> '{2}';
SELECT TO_CHAR(NOW(),'YYYY-MM-DD HH24:MI:SS');
SELECT TO_TIMESTAMP(1700000000);
SELECT pg_typeof(123); -- integer
当前用户 / 数据库 / schema
SELECT CURRENT_USER;
SELECT CURRENT_DATABASE();
SELECT CURRENT_SCHEMA();
查看当前查询
SELECT pg_backend_pid();
SELECT pg_stat_activity;
获取列表:
SELECT * FROM pg_tables;
SELECT * FROM pg_indexes;
SELECT md5('abc');
先安装:
CREATE EXTENSION pgcrypto;
常用:
SELECT crypt('password', gen_salt('bf')); -- hash
SELECT digest('abc', 'sha256'); -- binary
SELECT encode(digest('abc','sha256'),'hex');
PostgreSQL 原生支持 CIDR / INET 类型。
SELECT '192.168.1.8'::inet << '192.168.1.0/24';
取子网、广播地址
SELECT broadcast('192.168.1.10/24'::inet);
SELECT netmask('192.168.1.10/24'::inet);
SELECT 'abc123' ~ '[0-9]'; -- true
SELECT int4range(1,10) @> 5;
SELECT area(box(point(0,0), point(10,10)));