PostgreSQL作为一款企业级开源数据库,其丰富的函数库为开发者提供了强大的数据处理工具。本文将全面深入地探讨PostgreSQL中的常用函数,帮助读者系统地掌握数据库函数的应用。
length(string)
:计算字符串长度trim()
:去除字符串两端空格left(string, n)
:从左侧截取指定长度字符串right(string, n)
:从右侧截取指定长度字符串SELECT length('PostgreSQL'); -- 输出 10
SELECT trim(' PostgreSQL '); -- 输出 'PostgreSQL'
SELECT left('PostgreSQL', 4); -- 输出 'Post'
SELECT right('PostgreSQL', 3); -- 输出 'SQL'
regexp_replace()
:使用正则表达式替换split_part()
:字符串分割repeat()
:重复字符串reverse()
:反转字符串-- 使用正则表达式替换电话号码中的特殊字符
SELECT regexp_replace('123-456-7890', '[^0-9]', '', 'g');
-- 输出 '1234567890'
SELECT split_part('2024-01-15', '-', 2); -- 输出 '01'
SELECT repeat('PG ', 3); -- 输出 'PG PG PG '
SELECT reverse('PostgreSQL'); -- 输出 'LQSergsoP'
power(x, y)
:计算x的y次方sqrt()
:平方根mod()
:取模运算width_bucket()
:数值分桶SELECT power(2, 3); -- 输出 8
SELECT sqrt(16); -- 输出 4
SELECT mod(10, 3); -- 输出 1
-- 将0-100的数据分成5个桶
SELECT width_bucket(score, 0, 100, 5) AS grade_bucket
FROM exam_scores;
random()
:生成0-1之间随机数setseed()
:设置随机数种子percentile_cont()
:连续百分位数-- 设置随机数种子并生成随机数
SELECT setseed(0.5);
SELECT random();
-- 计算连续百分位数
SELECT
percentile_cont(0.5) WITHIN GROUP (ORDER BY salary) AS median_salary
FROM employees;
extract()
:提取日期/时间的特定部分date_part()
:获取日期/时间组件to_char()
:日期格式化interval
:时间间隔计算-- 提取年份和月份
SELECT
extract(year from current_date) AS current_year,
extract(month from current_date) AS current_month;
-- 格式化日期
SELECT to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS');
-- 计算两个日期间隔
SELECT current_date + interval '1 year 2 months';
at time zone
:转换时区current_setting()
:获取当前时区设置-- 转换时区
SELECT current_timestamp AT TIME ZONE 'UTC';
-- 获取当前时区
SELECT current_setting('timezone');
row_number()
:行号rank()
:排名dense_rank()
:密集排名lag()
和lead()
:访问前后行数据-- 按部门薪资排名
SELECT
name,
department,
salary,
rank() OVER (PARTITION BY department ORDER BY salary DESC) as salary_rank
FROM employees;
-- 获取前后行数据
SELECT
name,
sale_date,
amount,
lag(amount) OVER (ORDER BY sale_date) as previous_sale
FROM sales;
jsonb_extract_path()
:提取JSON路径jsonb_set()
:修改JSON值json_array_length()
:数组长度-- JSON数据处理
SELECT
jsonb_extract_path(user_info, 'address', 'city') AS city
FROM users;
-- 修改JSON值
SELECT
jsonb_set('{"name": "John"}'::jsonb, '{age}', '30'::jsonb);
array_agg()
:聚合数组unnest()
:数组展开array_cat()
:数组合并-- 将分组结果聚合为数组
SELECT
department,
array_agg(name) AS employee_names
FROM employees
GROUP BY department;
-- 数组合并
SELECT array_cat(ARRAY[1,2], ARRAY[3,4]); -- 输出 [1,2,3,4]
digest()
:生成哈希值encode()
:编码转换-- MD5哈希
SELECT digest('password', 'md5');
-- Base64编码
SELECT encode('PostgreSQL', 'base64');
pg_sleep()
:模拟延迟generate_series()
:生成序列-- 生成测试数据
SELECT * FROM generate_series(1, 10);
-- 性能测试模拟
EXPLAIN ANALYZE
SELECT pg_sleep(1);
PostgreSQL的函数生态系统极其丰富,本文仅展示了冰山一角。深入理解和灵活运用这些函数,不仅能提高开发效率,还能编写出更加简洁和高性能的数据库代码。