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

Yas*_*tha 14 postgresql datetime casting concatenation postgresql-9.1

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

我这样做了:

SELECT EXTRACT(EPOCH FROM TIMESTAMP '2011-05-17 10:40:28');
Run Code Online (Sandbox Code Playgroud)

它工作正常.

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

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

Clo*_*eto 16

SELECT EXTRACT(EPOCH FROM (Day || ' ' || Time)::timestamp);
Run Code Online (Sandbox Code Playgroud)


Erw*_*ter 15

datetime类型

如果你Day的类型date和你Time的类型time,有一个非常简单的解决方案:

SELECT EXTRACT(EPOCH FROM (day + time));
Run Code Online (Sandbox Code Playgroud)

您可以添加datetime获取timestamp [without time zone](根据会话的时区设置进行解释).

而且,严格来说,提取时代本身与您的问题无关.
date+ time导致a timestamp,就是这样.

字符串类型

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

SELECT EXTRACT(EPOCH FROM ('2013-07-18' || ' ' || '21:52:12')::timestamp);
Run Code Online (Sandbox Code Playgroud)

要么

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

您的形式并不能正常工作

SELECT EXTRACT(EPOCH FROM TIMESTAMP ('2013-07-18' || ' ' || '21:52:12'));
Run Code Online (Sandbox Code Playgroud)

这可行:

SELECT EXTRACT(EPOCH FROM "timestamp" ('2013-07-18' || ' ' || '21:52:12'));
Run Code Online (Sandbox Code Playgroud)

我引用关于类型转换的手册:

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

typename ( expression )

但是,这仅适用于名称也作为函数名称有效的类型.例如,double precision不能用这种方式,但相当于float8可以.此外,由于语法冲突,名称interval,timetimestamp只能以这种方式使用,如果它们是双引号.因此,使用类似函数的强制语法会导致不一致,并且应该避免使用.

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


Hyd*_*Ura 5

这对我来说效果很好:

SELECT CONCAT(Day,' ',Time)::timestamp;
Run Code Online (Sandbox Code Playgroud)