在PostgreSQL选择查询中将时间戳列值转换为纪元

Ani*_*ani 1 sql postgresql datetime

我需要将时间戳记值转换为SELECT查询中的纪元。请找到以下示例表和预期结果。

样表:

select * from log;
Run Code Online (Sandbox Code Playgroud)
select * from log;
Run Code Online (Sandbox Code Playgroud)

预期结果:

id        | 3
time      | 2016-03-30 18:44:19.189513
data1     | NONE
data3     | NONE
data4     | NONE
Run Code Online (Sandbox Code Playgroud)

日志表的行数为n。请找到以下版本详细信息:

id        | 3
time      | 1459343659
data1     | NONE
data3     | NONE
data4     | NONE
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 6

使用extract()函数:

select id, extract(epoch from time) as time, 
       data1, data2,data3
from log;
Run Code Online (Sandbox Code Playgroud)

显然,您的列不是timestamp列,而是a varchar,因此您首先需要将其转换为实际时间戳,然后才能使用extract()

select id, 
       extract(epoch from time::timestamp) as time, 
       data1, data2,data3
from log;
Run Code Online (Sandbox Code Playgroud)

仅当该列中的所有值均具有正确的时间戳ISO格式时,此方法才起作用。


这告诉你,你应该

永远不要将日期,时间戳或时间值存储在varchar列中!