PostgreSQL 9.6:去除Unix时间戳转换后及timestamp列的秒小数部分
PostgreSQL 9.6.20 时间处理解决方案
处理to_timestamp的输出结果
执行select to_timestamp(1476544839);会返回带时区且包含秒小数的时间,要得到不带时区、无秒小数的结果,有两种常用方法:
方法1:date_trunc截断+类型转换
直接截断到整秒,再转换为不带时区的timestamp类型:
SELECT date_trunc('second', to_timestamp(1476544839))::timestamp;
date_trunc('second', ...)会砍掉秒的小数部分,::timestamp把带时区的timestamptz转成不带时区的timestamp,完全符合预期。
方法2:to_char格式化+类型转换
先把时间格式化为无小数的字符串,再转回timestamp:
SELECT to_char(to_timestamp(1476544839), 'YYYY-MM-DD HH24:MI:SS')::timestamp;
这种方式可以自定义输出格式,灵活性更高。
处理表中timestamptz列的查询结果
针对my_table里类型为timestamp with time zone的timestamp列,要去掉秒小数部分,可参考以下写法:
保留timestamp类型(不带时区)
SELECT date_trunc('second', "timestamp")::timestamp FROM my_table;
保留timestamptz类型(仅去掉秒小数)
如果不需要转换时区类型,只是去掉秒的小数部分:
SELECT date_trunc('second', "timestamp") FROM my_table;
输出为格式化字符串
如果只需要字符串格式的结果:
SELECT to_char("timestamp", 'YYYY-MM-DD HH24:MI:SS') FROM my_table;
内容的提问来源于stack exchange,提问作者arilwan
相关产品推荐
相关产品推荐

