PostGreSQL 字符串处理
组合函数
- concat 组合函数,将多个字符串拼接为一个字符串。concat函数纯粹是一个拼接函数,可以忽略null值拼接,拼接的值没有分隔符,如果需要分割符,则需要用下面的函数concat_ws。
- concat_ws concat_ws函数比concat函数多了分隔符的功能,其实就是concat的升级版,假如分隔符为’’,则取出来的结果和concat是一样的。concat_ws分隔符还支持多个字符作为分隔符的,日常用得更多的可能是||。
切割函数
- split_part 按分隔符切割字符串并返回指定位置的字符串
- regexp_split_to_table 按分隔符切割字符串,以行数据返回分割后的字符串
--按分割符切割
SELECT regexp_split_to_table('kenyon, china loves',E'\\s');
regexp_split_to_table
-----------------------
kenyon,
china
loves
-- 按字母分割
SELECT regexp_split_to_table('kenyon,,china', E'\\s*');
regexp_split_to_table
-----------------------
k
e
n
y
o
n
,
,
c
h
i
n
a
- regexp_split_to_array 按分隔符切割字符串,以数组形式返回分割后的字符串
SELECT regexp_split_to_array('kenyon,love,,china,!',',');
regexp_split_to_array
--------------------------
{kenyon,love,"",china,!}
SELECT regexp_split_to_array('kenyon,love,,china!','s*');
regexp_split_to_array
-----------------------------------------------
{k,e,n,y,o,n,",",l,o,v,e,",",",",c,h,i,n,a,!}
PostGreSQL 字符串截取
select split_part('AAA-BBBB-CCCCC','-',2)
该 SQL 语句的意思是根据 ‘-’ 将字符串进行分割,并返回分割后的第二部分
如果分隔符数量不一致的话,需要先计算分隔符的个数
-- 将 1个分隔符 替换为 2个分隔符,然后用长度相减得到分隔符数
-- 最后 +1 是为了取最后一部分内容
select split_part(table.column ,'-', length(replace(table.column, '-', '--')) - length(table.column) + 1)
from table
PostGreSQL 字符串拼接
select concat_ws(':', 'aaa', 'bbb')
-- aaa:bbb
-- 几行数据中的 同一 单字段值根据连接符拼接
select string_agg(name, '\r\n') from student
-- 1号\r\n2号\r\n3号\r\n4号\r\n5号
-- 如果要将多个字段的值拼接成一个:
select string_agg(concat_ws(':', name, sex),'\r\n' order by id) as xxx from student
-- 1号:0 \r\n 2号:0 \r\n 3号:0 \r\n 4号:0 \r\n 5号:1
PostGreSQL 日期时间函数
-- 获取系统时间:
select now();
select current_timestamp;
-- 俩函数效果一样
-- 获取日期:
select current_date;
-- 获取时间:
select current_time;
-- 获取当前日期一小时后:(Years、Months、Weeks、Days、Hours、Minutes、Seconds)
select now() + '1 hour';
-- 日期时间的截取
-- EXTRACT(field FROM source)
-- field 表示取的时间对象,source 表示取的日期来源,类型为 timestamp、time 或 interval。
select extract(year from now());