Исправление временного формата в PostgreSQL

#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, а затем использовать регулярные выражения для обновления правильных значений и вставки их в правильные столбцы. Такого рода вещи часто случаются при преобразовании данных.