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);