我在数据库中有日期和时间字段。我希望通过连接日期和时间来获得时间戳。如何在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...
答案 0 :(得分:15)
SELECT EXTRACT(EPOCH FROM (Day || ' ' || Time)::timestamp);
答案 1 :(得分:15)
date
和time
类型如果您的Day
类型为date
且Time
类型为time
,则有一个非常简单的解决方案:
SELECT EXTRACT(EPOCH FROM (day + time));
您只需添加date
和time
即可获得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
可以。此外,名称interval
,time
和timestamp
只能以这种方式使用,如果它们是双引号, 因为句法冲突。因此,使用了 类似函数的强制转换语法会导致不一致,应该可能 要避免。
大胆强调我的 它的要点:而是使用前两种语法变体之一。
答案 2 :(得分:0)
这对我来说很好:
SELECT CONCAT(Day,' ',Time)::timestamp;