获取连接日期和时间列的时间戳

时间:2013-07-18 13:52:53

标签: postgresql datetime casting concatenation postgresql-9.1

我在数据库中有日期和时间字段。我希望通过连接日期和时间来获得时间戳。如何在PostgreSQL中执行此操作?

我做到了:

SELECT EXTRACT(EPOCH FROM TIMESTAMP '2011-05-17 10:40:28');

它工作正常。

但是当我尝试更换日期和时间字段时,我收到以下错误:

SELECT EXTRACT(EPOCH FROM TIMESTAMP Day || ' ' || Time);
ERROR:  syntax error at or near "Day"
LINE 1: ...quest_count > 0 AND (EXTRACT(EPOCH FROM TIMESTAMP Day || ' ' || Time)) > (e...

3 个答案:

答案 0 :(得分:15)

SELECT EXTRACT(EPOCH FROM (Day || ' ' || Time)::timestamp);

答案 1 :(得分:15)

datetime类型

如果您的Day类型为dateTime类型为time,则有一个非常简单的解决方案:

SELECT EXTRACT(EPOCH FROM (day + time));

您只需添加datetime即可获得timestamp [without time zone](根据会话的时区设置进行解释)。

严格地说,提取时代本身与你的问题无关 date + time会产生timestamp,就是这样。

字符串类型

如果您在谈论字符串文字或text / varchar列,请使用:

SELECT EXTRACT(EPOCH FROM ('2013-07-18' || ' ' || '21:52:12')::timestamp);

SELECT EXTRACT(EPOCH FROM cast('2013-07-18' ||' '|| '21:52:12' AS timestamp));

您的表单工作

SELECT EXTRACT(EPOCH FROM TIMESTAMP ('2013-07-18' || ' ' || '21:52:12'));

这样可行:

SELECT EXTRACT(EPOCH FROM "timestamp" ('2013-07-18' || ' ' || '21:52:12'));

我引用the manual about type casts

  

也可以使用类似函数指定类型转换   语法:

     

typename ( expression )

     

但是,这仅适用于名称也有效的类型   功能名称。例如,double precision不能以这种方式使用,   但等效的float8可以。此外,名称intervaltime和    timestamp只能以这种方式使用,如果它们是双引号,   因为句法冲突。因此,使用了   类似函数的强制转换语法会导致不一致,应该可能   要避免。

大胆强调我的 它的要点:而是使用前两种语法变体之一。

答案 2 :(得分:0)

这对我来说很好:

SELECT CONCAT(Day,' ',Time)::timestamp;