pg中存储的是日期,形如:"2017-01-06 14:38:44"sql
查询的时候要以时间戳的形式返回,形如:1483713524函数
经查询,epoch函数能够实现此功能,例如一下sql:spa
SELECT extract(epoch FROM valid_end_time) * 1000 , valid_end_time as valid_end_time FROM cms_policy_access WHERE valid_flag = 1 and type = '00101'
查出的结果以下:code
能够看到,1483713524000就是此时间的一个时间戳格式(扩大了1000倍后)it
可是可能存在一个问题,时区问题,好比这里的1483713524000,转化为时间格式以后为:ast
2017-01-06 22:38:44class
与存储的时间相比,增大了八个小时。百度
猜想缘由多是:date
此表cms_policy_access中的valid_end_time的格式是timestamp without time zone,epoch是根据其余时区计算的时间戳,和本地的时区不一样,致使了时间的间隔;语法
百度pg的手册,里面是使用EPOCH FROM TIMESTAMP WITH TIME ZONE的方式转换的,好比:
SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2017-01-05 14:38:42');
获得1483598322
通过转换获得的时间是准确的,二者的差异就是TIMESTAMP WITH TIME ZONE
关键是上述的sql改成下面形式就报错了
SELECT extract(epoch FROM TIMESTAMP WITH TIME ZONE valid_end_time) , valid_end_time as valid_end_time FROM cms_policy_access WHERE valid_flag = 1 and type = '00101'
各类形式的语法都试了,仍是没用
继续百度,终于获得另一个方法,直接贴sql:
SELECT cast(extract(epoch FROM date_trunc('second', to_timestamp(to_char(valid_start_time, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')))* 1000 as text) as "starttime" , extract(epoch FROM valid_start_time) * 1000 , valid_start_time as valid_start_time FROM cms_policy_access WHERE valid_flag = 1 and type = '00101'
能够看到,这里二者获取的时间戳确实不同,通过转换,发现第一列是正确的。。。
其余相关的能够百度
----------------------------------------------
时间戳转换:
update cms_products_base_info set sale_start_date = to_timestamp('2017-02-01 13:22:11', 'YYYY-MM-DD HH24:MI:SS'), sale_END_date = to_timestamp('2017-04-13 16:22:33', 'YYYY-MM-DD HH24:MI:SS') where product_code = 'YLX'