将 Postgres 文本列值读取为转换为纪元整数的时间戳
Read Postgres Text column values as timestamp converted to epoch integers
我有一个 postgres 数据库,其中包含 date/time 文本格式的信息。没有办法改变它,但我必须将这些值作为纪元以来的毫秒来检索。
我设法进行了查询,将这些日期时间记录转换为时间戳,以便获得正确的“最大”函数行为,如下所示:
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
表示秒,而不是毫秒。
我有一个 postgres 数据库,其中包含 date/time 文本格式的信息。没有办法改变它,但我必须将这些值作为纪元以来的毫秒来检索。 我设法进行了查询,将这些日期时间记录转换为时间戳,以便获得正确的“最大”函数行为,如下所示:
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
表示秒,而不是毫秒。