本文将介绍一些PostgreSQL中常用的函数,包括其用途、参数说明、使用示例、测试用例,以及一些复杂函数的使用。
1. length()
用途
计算字符串的长度。
参数说明
text
:需要计算长度的字符串。
使用示例
SELECT length('PostgreSQL');
输出:
length
--------10
2. substring()
用途
从字符串中提取子字符串。
参数说明
text
:源字符串。start
:开始位置。length
:截取的长度。
使用示例
SELECT substring('PostgreSQL' FROM 1 FOR 4);
输出:
substring
-----------Post
3. upper()
用途
将字符串转换为大写。
参数说明
text
:需要转换的字符串。
使用示例
SELECT upper('PostgreSQL');
输出:
upper
---------POSTGRESQL
4. lower()
用途
将字符串转换为小写。
参数说明
text
:需要转换的字符串。
使用示例
SELECT lower('PostgreSQL');
输出:
lower
---------postgresql
5. concat()
用途
连接多个字符串。
参数说明
text1, text2, ...
:需要连接的字符串。
使用示例
SELECT concat('Post', 'greSQL');
输出:
concat
----------PostgreSQL
6. coalesce()
用途
返回第一个非NULL的参数。
参数说明
value1, value2, ...
:多个可能为NULL的值。
使用示例
SELECT coalesce(NULL, 'PostgreSQL', 'Database');
输出:
coalesce
-----------PostgreSQL
7. nullif()
用途
如果两个参数相等,则返回NULL,否则返回第一个参数。
参数说明
value1
:第一个值。value2
:第二个值。
使用示例
SELECT nullif('PostgreSQL', 'PostgreSQL');
输出:
nullif
--------NULL
8. age()
用途
计算两个时间戳之间的差异。
参数说明
timestamp1
:第一个时间戳。timestamp2
:第二个时间戳。
使用示例
SELECT age('2024-07-08', '2020-07-08');
输出:
age
----------------4 years 0 mons
9. now()
用途
获取当前的时间戳。
参数说明
无参数。
使用示例
SELECT now();
输出:
now
-------------------------------2024-07-08 14:30:00.123456+00
10. to_char()
用途
将日期或数字转换为指定格式的字符串。
参数说明
value
:日期或数字。format
:格式字符串。
使用示例
SELECT to_char(now(), 'YYYY-MM-DD HH24:MI:SS');
输出:
to_char
-------------------2024-07-08 14:30:00
11. generate_series()
用途
生成一个连续的数值或日期序列。
参数说明
start
:开始值。stop
:结束值。step
:步长(可选)。
使用示例
SELECT generate_series(1, 5);
输出:
generate_series
-----------------12345
12. array_agg()
用途
将一列值聚合成一个数组。
参数说明
expression
:要聚合的列。
使用示例
SELECT array_agg(column_name) FROM table_name;
输出:
array_agg
------------{value1,value2,value3}
13. string_agg()
用途
将一列值连接成一个字符串,中间用指定的分隔符分隔。
参数说明
expression
:要连接的列。delimiter
:分隔符。
使用示例
SELECT string_agg(column_name, ',') FROM table_name;
输出:
string_agg
-------------value1,value2,value3
14. jsonb_agg()
用途
将一列值聚合成一个JSON数组。
参数说明
expression
:要聚合的列。
使用示例
SELECT jsonb_agg(column_name) FROM table_name;
输出:
jsonb_agg
------------[value1,value2,value3]
15. jsonb_object_agg()
用途
将一列键值对聚合成一个JSON对象。
参数说明
key
:键列。value
:值列。
使用示例
SELECT jsonb_object_agg(key_column, value_column) FROM table_name;
输出:
jsonb_object_agg
------------------{"key1": "value1", "key2": "value2"}
16. row_to_json()
用途
将一行记录转换为JSON对象。
参数说明
record
:要转换的记录。
使用示例
SELECT row_to_json(row) FROM (SELECT 1 AS id, 'PostgreSQL' AS name) row;
输出:
row_to_json
---------------------------{"id":1,"name":"PostgreSQL"}
17. json_build_object()
用途
构建一个JSON对象。
参数说明
key1
:第一个键。value1
:第一个值。key2
:第二个键。value2
:第二个值。
使用示例
SELECT json_build_object('id', 1, 'name', 'PostgreSQL');
输出:
json_build_object
---------------------------{"id":1,"name":"PostgreSQL"}
18. regexp_matches()
用途
使用正则表达式匹配字符串,返回匹配的子字符串数组。
参数说明
string
:要匹配的字符串。pattern
:正则表达式模式。
使用示例
SELECT regexp_matches('PostgreSQL 13', '\d+');
输出:
regexp_matches
----------------{13}
19. unnest()
用途
将数组展平为一组行。
参数说明
array
:要展平的数组。
使用示例
SELECT unnest(ARRAY[1, 2, 3]);
输出:
unnest
--------123
20. pg_sleep()
用途
使当前会话暂停指定的秒数。
参数说明
seconds
:暂停的秒数。
使用示例
SELECT pg_sleep(5);
输出:
pg_sleep
----------
Test Cases
以下是一些测试用例,用于验证上述函数的正确性。
-- Test for length()
SELECT length('PostgreSQL') AS length_test;-- Test for substring()
SELECT substring('PostgreSQL' FROM 1 FOR 4) AS substring_test;-- Test for upper()
SELECT upper('PostgreSQL') AS upper_test;-- Test for lower()
SELECT lower('PostgreSQL') AS lower_test;-- Test for concat()
SELECT concat('Post', 'greSQL') AS concat_test;-- Test for coalesce()
SELECT coalesce(NULL, 'PostgreSQL', 'Database') AS coalesce_test;-- Test for nullif()
SELECT nullif('PostgreSQL', 'PostgreSQL') AS nullif_test;-- Test for age()
SELECT age('2024-07-08', '2020-07-08') AS age_test;-- Test for now()
SELECT now() AS now_test;-- Test for to_char()
SELECT to_char(now(), 'YYYY-MM-DD HH24:MI:SS') AS to_char_test;-- Test for generate_series()
SELECT generate_series(1, 5) AS generate_series_test;-- Test for array_agg()
SELECT array_agg(column_name) FROM table_name;-- Test for string_agg()
SELECT string_agg(column_name, ',') FROM table_name;-- Test for jsonb_agg()
SELECT jsonb_agg(column_name) FROM table_name;-- Test for jsonb_object_agg()
SELECT jsonb_object_agg(key_column, value_column) FROM table_name;-- Test for row_to_json()
SELECT row_to_json(row) FROM (SELECT 1 AS id, 'PostgreSQL' AS name) row;-- Test for json_build_object()
SELECT json_build_object('id', 1, 'name', 'PostgreSQL') AS json_build_object_test;-- Test for regexp_matches()
SELECT regexp_matches('PostgreSQL 13', '\d+') AS regexp_matches_test;-- Test for unnest()
SELECT unnest(ARRAY[1, 2, 3]) AS unnest_test;-- Test for pg_sleep()
SELECT pg_sleep(5) AS pg_sleep_test;
总结
PostgreSQL 提供了丰富且强大的内置函数,极大地方便了数据库操作和数据处理。从字符串处理、时间操作到JSON处理和正则表达式匹配,这些函数覆盖了广泛的应用场景。通过灵活运用这些函数,开发者可以更高效地进行数据库开发和数据处理。
参考链接
- PostgreSQL Built-in Functions
- PostgreSQL String Functions
- PostgreSQL Date/Time Functions
- PostgreSQL JSON Functions