标识符?
不清楚您是否在标识符中使用了大写字母,这需要用双引号括起来。
此外,Day
是SQL中的保留字,尽管在Postgres中允许其作为标识符,但可能需要特殊处理。一般建议避免使用保留字和基本类型名称。无论如何,双引号能解决问题。我的建议是使用合法的小写标识符,永远不需要用双引号。详情请见:
date
和time
类型
如果您的列"Day"
是date
类型,而您的列"Time"
是time
类型,则有一个非常简单的解决方案:
SELECT EXTRACT(EPOCH FROM ("Day" + "Time"));
你只需要添加类型日期
和时间
,就可以得到一个timestamp [没有时区]
。提取纪元与你的问题本身无关。日期
+时间
得到一个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'));
类型转换的手册:
还可以使用类似函数的语法来指定类型转换:
typename ( expression )
但是,这仅适用于名称也是有效函数名称的类型。例如,double precision
不能以这种方式使用,但等效的 float8
可以。而且,只有将名称interval
、time
和 timestamp
加上双引号,才能以这种方式使用,因为存在语法冲突。因此,使用类似函数的转换语法会导致不一致性,应该尽量避免。
强调部分为本人添加。
请使用前两种语法变体中的任意一种。
to_timestamp
中,这将使其以时间戳格式呈现(目前它正在返回纪元时间)。 - Djones4822