#postgresql #casting #timestamp
#postgresql #Кастинг #временная метка
Вопрос:
Я работаю над сторонними данными, которые мне нужно загрузить в мою базу данных postgresql. Я сталкиваюсь с проблемами, когда иногда я получаю время «24:00:30», когда на самом деле оно должно быть «00:00:30». Это отклоняет данные.
Я пытался привести, но это не сработало.
insert into stop_times_test trip_id, cast(arrival_time as time), feed_id, status
from external_source;
Есть ли какой-либо способ преобразовать в правильный внутренний формат?
Ответ №1:
Это может сработать для вашего случая:
> select '0:0:0'::time '24:00:30'::interval;
00:00:30
Ответ №2:
Приведение к интервалу, затем приведение ко времени:
SELECT '24:00:30'::interval::time
Если вы хотите массово загружать данные с COPY
помощью or INSERT
, создайте тип данных целевого столбца interval
и преобразуйте его time
позже. Это работает из коробки:
ALTER TABLE mytable ALTER col1 TYPE time;
Ответ №3:
Нет, волшебного способа сделать это нет. Никакое приведение вам не поможет. 24:00:30
недопустимое время. Точка.
Вы могли бы попробовать добавить это значение в varchar, а затем использовать регулярные выражения для обновления правильных значений и вставки их в правильные столбцы. Такого рода вещи часто случаются при преобразовании данных.