Считать Postgres значения текстового столбца как метку времени, преобразованную в целые числа эпохи - PullRequest
1 голос
/ 04 августа 2020

У меня есть база данных postgres, содержащая информацию о дате / времени в текстовом формате. Невозможно изменить его, но мне нужно получить эти значения как миллисекунды с эпохи. Мне удалось сделать запрос, преобразовав эти записи даты и времени в метки времени, чтобы получить правильное поведение функции «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;

Есть ли реальный способ выполнить sh то, что я хочу, с помощью запроса, или я должен сделать что-то более сложное?

PS Конечно, я могу просто получить всю информацию в виде текста и использовать Qt (QDateTime), чтобы преобразовать ее в миллисекунды, но это было бы дороже, и мне было интересно, есть ли способ попросите базу данных сделать это за меня.

1 Ответ

0 голосов
/ 04 августа 2020

Ключевое слово timestamp необходимо только для литералов (констант), а не в том случае, если у вас есть подходящее значение временной метки:

SELECT extract(epoch from max(TO_TIMESTAMP(column_name, 'YYYY/MM/DD HH24:MI:SS')))
FROM table_name;

Обратите внимание, что epoch представляет секунд , не миллисекунды.

...