Как преобразовать varchar в метку времени в PostgreSQL?

#postgresql #timestamp #varchar

Вопрос:

У меня есть следующие данные, но тип столбца-Varchar:

 2019-09-28T23:59:59.52Z
 

Я предполагаю, что 52 здесь-это миллисекунды, если это так..

Я хотел бы преобразовать его следующим образом и изменить тип столбца на отметку времени:

 2019-09-28 23:59:59.52
 

Может кто-нибудь дать мне знать, как я могу конвертировать в PostgreSQL?

РЕДАКТИРОВАТЬ: Я могу видеть данные в таблице как (так как тип столбца-varchar):

 2019-09-28T23:59:59.52Z
 

Вместо этого я хочу, чтобы данные в таблице отображались как:

 2019-09-28 23:59:59        ( and may be .52, if possible)
 

Мне также нужно изменить тип столбца на отметку времени, я думаю, пожалуйста, помогите и с этим.

Ответ:

Тим предоставил решение, вы можете следовать ему.

Но в моем случае это prod env, поэтому я только что изменил тип, используя:

 ALTER TABLE my_table ALTER COLUMN my_column TYPE TIMESTAMP USING my_column::timestamp without time zone;
 

Спасибо

Ответ №1:

Ваш строковый литерал метки времени уже находится в формате, который может быть непосредственно приведен в Postgres:

 SELECT '2019-09-28T23:59:59.52Z'::timestamp;  -- 2019-09-28 23:59:59.52
 

В качестве теста давайте добавим один день, чтобы убедиться, что он работает:

 SELECT '2019-09-28T23:59:59.52Z'::timestamp   interval '1 day';
-- 2019-09-29 23:59:59.52
 

Если вы действительно хотите добавить новый столбец метки времени, используя строковые данные из другого столбца, попробуйте:

 ALTER TABLE yourTable ADD COLUMN new_ts TIMESTAMP;

UPDATE yourTable SET new_ts = old_ts::timestamp;

ALTER TABLE yourTable DROP COLUMN old_ts;
ALTER TABLE yourTable RENAME COLUMN new_ts TO old_ts;  -- optional
 

Последнее ALTER утверждение необязательно, если вы хотите, чтобы новый столбец с меткой времени bona fide носил то же имя, что и столбец со старой текстовой меткой времени.

Комментарии:

1. Вы правы. Но дело в том, что тип столбца «varchar», и я хочу, чтобы данные в таблице указывались как метка времени.

2. Я не хочу добавлять новый столбец, я просто хочу изменить тип текущего столбца и показать данные по мере необходимости. Вы можете мне с этим помочь?

3. Кроме того, к вашему сведению, данные поступают в эту таблицу из AWS Lambda в виде строки. Итак, если мы изменим текущий тип столбца в таблице с varchar на отметку времени, будет ли операция успешной?

4. @Jack Это должно работать без проблем, если все данные метки времени верны. Проверьте обновленный ответ.

5. Спасибо, Тим, я изменил тип столбца, как уже упоминалось. Это действительно сработало! 🙂