PostgreSql时间和日期字符串转换函数

select to_char(CURRENT_DATE,'yyyy-mm-dd') -- 当前时间
select to_char(date_trunc('month',current_date),'yyyy-mm-dd') -- 当月第一天
select date_trunc('month',current_date) + interval'1 month - 1 day'  -- 当月最后一天
SELECT to_char(date_trunc('year',CURRENT_DATE),'yyyy-mm-dd')  -- 当年第一天
SELECT to_char(date_trunc('year',now() + '-1 year'),'yyyy-mm-dd')  -- 去年第一天

--将text的字段转换为日期

select to_char(to_timestamp(a, 'YYYY-MM-DD'),'YYYY-MM-DD')FROM time_test;

select to_date(a, 'YYYY-MM-DD') from time_test;

select to_date('2001 03 24', 'YYYY-MM-DD');

--不指定时区,则默认将a转为系统时区(东八区)后转换为字符串

select to_char(a, 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;

--指定时区为美东时区后转换为字符串

select to_char(a at time zone 'US/Eastern', 'YYYY-MM-DD HH24:MI:SS') FROM timestamptz_test;

-- 从指定日期开始向前加7天,返回日期类型

select date '2001-09-28' + integer '7';

-- 当前日期向前加3天,返回日期类型

select current_date+ integer '3 ';

-- 当前时间向前加1天,返回日期类型

select to_char(current_date+ interval '1 day','yyyy-mm-dd');

--从指定日期开始向前加3个小时(0点开始计算),返回timestamp类型

select date '2001-09-28' + time '03:00';

-- 从指定日期开始向前加1个小时(0点开始计算),返回timestamp类型

select date '2001-09-28' + interval '1 hour';

-- 当前时间向前加1天,返回timestamptz类型

select now()+interval '1 day';

-- 当前时间向前加1个月,返回timestamptz类型

select now()+interval '1 month';

-- 当前时间向前加2年,返回timestamptz类型

select now()+interval '2 year';

-- 使用指定分隔符将指定表达式的非空值串联成字符串。可作为列转行使用

select string_agg(city,',') from city_test;   -- 上海,台湾,东京,巴黎,伦敦

-- 字符串分割函数,将分割出的数据转换成行,可作为行转列使用

select name,regexp_split_to_table(intrests, ',') from interests_test;

-- 字符串分割函数,将分割出的数据转换成数组,可作为行转数组使用

select name,regexp_split_to_array(intrests, ',') from interests_test;

-- 将字符串中原有的子字串替换成新的子字串

select animal,replace(color,'白','五彩斑斓') from animal_test;

-- 将一行数据转换为JSON格式

select row_to_json(t) from (select name,intrests from interests_test) as t;

-- 使用指定的分隔符拆分字符串,并返回第n个字串

select split_part(a, '/', 2) from split_part_test;

-- 连接所有参数,忽略NULL参数

select concat('abcde', 2, NULL, 22);

-- 使用分隔符连接除第一个参数外的所有参数

select concat_ws(',', 'abcde', 2, NULL, 22);

-- 从字符串中找出指定的子字符串

select substring('Thomas' from 2 for 3);