#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. Спасибо, Тим, я изменил тип столбца, как уже упоминалось. Это действительно сработало! 🙂