PostgreSQL 常用函数
                           
天天向上
发布: 2025-03-12 23:58:23

原创
661 人浏览过

PostgreSQL 提供了大量的内建函数,这些函数支持各种常见的数据处理任务,帮助开发者完成从字符串操作到数据类型转换等各种操作。以下是 PostgreSQL 常用函数的详细分类和使用介绍:

1. 数学函数

1.1 ABS(x)

返回数值 x 的绝对值。

SELECT ABS(-10);  -- 返回 10

1.2 CEIL(x)CEILING(x)

返回大于或等于 x 的最小整数。

SELECT CEIL(4.3);  -- 返回 5

1.3 FLOOR(x)

返回小于或等于 x 的最大整数。

SELECT FLOOR(4.7);  -- 返回 4

1.4 ROUND(x, n)

将数字 x 四舍五入到小数点后 n 位。

SELECT ROUND(4.5678, 2);  -- 返回 4.57

1.5 POWER(x, y)

返回 xy 次幂。

SELECT POWER(2, 3);  -- 返回 8

1.6 SQRT(x)

返回数字 x 的平方根。

SELECT SQRT(16);  -- 返回 4

1.7 RANDOM()

返回一个介于 0 和 1 之间的随机浮动数值。

SELECT RANDOM();  -- 返回一个随机值,如 0.456789

1.8 PI()

返回常数 π 的值。

SELECT PI();  -- 返回 3.14159265358979

2. 字符串函数

2.1 CONCAT(str1, str2, ...)

连接多个字符串。

SELECT CONCAT('Hello', ' ', 'World');  -- 返回 'Hello World'

2.2 LENGTH(str)

返回字符串 str 的长度。

SELECT LENGTH('Hello');  -- 返回 5

2.3 LOWER(str)

将字符串 str 转为小写。

SELECT LOWER('Hello');  -- 返回 'hello'

2.4 UPPER(str)

将字符串 str 转为大写。

SELECT UPPER('Hello');  -- 返回 'HELLO'

2.5 TRIM([LEADING | TRAILING | BOTH] trim_character FROM str)

移除字符串两端的空格或指定字符。

SELECT TRIM(' ' FROM '  Hello  ');  -- 返回 'Hello'

2.6 REPLACE(str, old_substring, new_substring)

在字符串 str 中替换 old_substringnew_substring

SELECT REPLACE('Hello World', 'World', 'PostgreSQL');  -- 返回 'Hello PostgreSQL'

2.7 POSITION(substring IN str)

返回子字符串 substring 在字符串 str 中的位置。

SELECT POSITION('l' IN 'Hello');  -- 返回 3

2.8 SUBSTRING(str FROM start FOR length)

返回从 str 开始的指定长度的子字符串。

SELECT SUBSTRING('Hello' FROM 2 FOR 3);  -- 返回 'ell'

2.9 REVERSE(str)

返回字符串的反转。

SELECT REVERSE('Hello');  -- 返回 'olleH'

3. 日期和时间函数

3.1 CURRENT_DATE

返回当前日期。

SELECT CURRENT_DATE;  -- 返回 '2025-03-12'

3.2 CURRENT_TIME

返回当前时间。

SELECT CURRENT_TIME;  -- 返回 '14:30:45'

3.3 CURRENT_TIMESTAMP

返回当前时间戳(包括日期和时间)。

SELECT CURRENT_TIMESTAMP;  -- 返回 '2025-03-12 14:30:45'

3.4 NOW()

返回当前时间戳(与 CURRENT_TIMESTAMP 相同)。

SELECT NOW();  -- 返回 '2025-03-12 14:30:45'

3.5 AGE(timestamp, timestamp)

返回两个时间戳之间的间隔。

SELECT AGE('2025-03-12', '1990-01-01');  -- 返回 '35 years 2 mons 11 days'

3.6 EXTRACT(field FROM source)

从日期或时间中提取指定部分(如年、月、日、小时等)。

SELECT EXTRACT(YEAR FROM CURRENT_DATE);  -- 返回当前年份

3.7 TO_DATE(string, format)

将字符串转换为日期。

SELECT TO_DATE('2025-03-12', 'YYYY-MM-DD');  -- 返回 '2025-03-12'

3.8 TO_TIMESTAMP(string, format)

将字符串转换为时间戳。

SELECT TO_TIMESTAMP('2025-03-12 14:30:45', 'YYYY-MM-DD HH24:MI:SS');  -- 返回 '2025-03-12 14:30:45'

3.9 DATE_TRUNC(field, source)

将日期或时间戳截断到指定的粒度。

SELECT DATE_TRUNC('year', CURRENT_DATE);  -- 返回 '2025-01-01 00:00:00'

4. JSON 和 JSONB 函数

4.1 JSONB_BUILD_OBJECT(key, value, ...)

创建一个 JSONB 对象。

SELECT JSONB_BUILD_OBJECT('name', 'John', 'age', 30);  -- 返回 '{"name": "John", "age": 30}'

4.2 JSONB_ARRAY_LENGTH(jsonb)

返回 JSONB 数组的长度。

SELECT JSONB_ARRAY_LENGTH('[1, 2, 3]'::jsonb);  -- 返回 3

4.3 JSONB_SET(jsonb, path, new_value)

修改 JSONB 对象中的某个值。

SELECT JSONB_SET('{"name": "John", "age": 30}'::jsonb, '{age}', '35');  -- 返回 '{"name": "John", "age": 35}'

5. 聚合函数

5.1 COUNT(*)

返回符合条件的行数。

SELECT COUNT(*) FROM employees;  -- 返回员工总数

5.2 SUM(column)

返回某列的总和。

SELECT SUM(salary) FROM employees;  -- 返回所有员工的工资总和

5.3 AVG(column)

返回某列的平均值。

SELECT AVG(salary) FROM employees;  -- 返回员工的平均工资

5.4 MIN(column)

返回某列的最小值。

SELECT MIN(salary) FROM employees;  -- 返回最低工资

5.5 MAX(column)

返回某列的最大值。

SELECT MAX(salary) FROM employees;  -- 返回最高工资

5.6 GROUP_CONCAT()

返回一个字符串,它由组内每一行的值连接而成。

SELECT STRING_AGG(name, ', ') FROM employees;  -- 返回所有员工姓名的逗号分隔列表

6. 条件函数

6.1 COALESCE(value, ...)

返回列表中的第一个非 NULL 值。

SELECT COALESCE(NULL, NULL, 'First', 'Second');  -- 返回 'First'

6.2 NULLIF(value1, value2)

如果两个值相等,返回 NULL,否则返回第一个值。

SELECT NULLIF(10, 10);  -- 返回 NULL
SELECT NULLIF(10, 5);   -- 返回 10

6.3 CASE

条件语句,根据条件返回不同的值。

SELECT CASE WHEN salary > 50000 THEN 'High' ELSE 'Low' END FROM employees;

7. 字符串转义和处理

7.1 MD5(string)

返回字符串的 MD5 哈希值。

SELECT MD5('password');  -- 返回 '5f4dcc3b5aa765d61d8327deb882cf99'

7.2 ENCODE(bytea, encoding)

将二进制数据编码为指定格式(如 base64)。

SELECT ENCODE('Hello'::bytea, 'base64');  -- 返回 'SGVsbG8='

7.3 DECODE(string, encoding)

将编码后的字符串解码。

SELECT DECODE('SGVsbG8='::text, 'base64');  -- 返回 'Hello'

总结

PostgreSQL 的函数功能非常强大,涵盖了从数据类型处理、数学计算、字符串操作、日期时间、聚合函数、JSON 数据处理等多方面的需求。了解并掌握这些函数能有效提高数据查询和管理效率。更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *