我有一个postgres数据库,以文本格式携带日期/时间信息。没有办法改变它,但我必须从epoch开始以毫秒的形式检索这些值。我设法进行了一个查询,将这些日期时间记录转换为时间戳,这样我就得到了正确的";max";这样的功能行为:
SELECT max(TO_TIMESTAMP(column_name, 'YYYY/MM/DD HH24:MI:SS'))
FROM table_name;
但将其他结果转换为毫秒似乎并不奏效。文档和论坛中的所有示例都只展示了一些文字值的用法,而不是从数据库中选择的值。所以像这样的线路不起作用:
SELECT EXTRACT(EPOCH FROM TIMESTAMP
(select max(TO_TIMESTAMP(column_name, 'YYYY/MM/DD HH24:MI:SS'))
FROM table_name));
SELECT EXTRACT(EPOCH FROM TIMESTAMP
(select TO_TIMESTAMP(column_name,'YYYY/MM/DD HH24:MI:SS')
FROM table_name));
SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE(
SELECT TO_TIMESTAMP(column_name, 'YYYY/MM/DD HH24:MI:SS')
FROM table_name));
SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE TO_TIMESTAMP
(column_name, 'YYYY/MM/DD HH24:MI:SS'))
FROM table_name;
有没有一种实际的方法可以通过使用查询来实现我想要的东西,或者我必须做一些更复杂的事情?
p.S。当然,我可以将所有信息作为文本检索,并使用Qt(QDateTime(将其转换为毫秒,但这会更昂贵,我想知道是否有办法让数据库为我做这件事。
timestamp
关键字仅用于文字(常量(,如果您有合适的时间戳值可用,则不需要:
SELECT extract(epoch from max(TO_TIMESTAMP(column_name, 'YYYY/MM/DD HH24:MI:SS')))
FROM table_name;
请注意,epoch
表示秒,而不是毫秒。