2013-07-18 193 views
12

我在数据库中有日期和时间字段。我想通过连接日期和时间来获得时间戳。如何在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

你忘了提供确切的数据类型。 –

回答

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

datetime类型

如果您Daydate类型和你Timetime类型,有一个非常简单的解决方案:

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

It is also possible to specify a type cast using a function-like syntax:

typename (expression)

However, this only works for types whose names are also valid as function names. For example, double precision cannot be used this way, but the equivalent float8 can. Also, the names interval , time , and timestamp can only be used in this fashion if they are double-quoted, because of syntactic conflicts. Therefore, the use of the function-like cast syntax leads to inconsistencies and should probably be avoided.

大胆重点煤矿。
它的要点:而是使用前两种语法变体之一。