Приведение типа varchar к дате

Я хочу изменить определенный столбец в моей базе данных PostgreSQL с типа character_varying на тип date. Дата в формате yyyy:mm:dd

Я пытался сделать:

alter table table_name
alter column date_time type date using (date_time::text::date);

Но я получил сообщение об ошибке:

значение поля даты/времени вне допустимого диапазона: "2011:06:15"


person Lo Bizzarri    schedule 08.11.2012    source источник


Ответы (1)


При преобразовании text или varchar в date ожидается формат даты по умолчанию для вашей установки — в зависимости от datestyle в файле postgresql.conf.

Как правило, двоеточие (:) является разделителем time. В простом приведении PostgreSQL, вероятно, попытается интерпретировать «2011:06:15» как время — и потерпит неудачу.

Чтобы устранить двусмысленность, используйте to_date() с соответствующим шаблоном для ваших дат:

ALTER TABLE table_name
ALTER COLUMN date_time type date
USING to_date(date_time, 'YYYY:MM:DD'); -- pattern for your example
person Erwin Brandstetter    schedule 08.11.2012
comment
Большое спасибо, это работает! Но теперь у меня такая же проблема с часовой колонкой. Это строка, и я хотел бы преобразовать ее в тип времени, но я не знаю, как это сделать. Можете ли вы помочь мне даже с этой проблемой? Заранее спасибо. - person Lo Bizzarri; 09.11.2012
comment
@LoBizzarri: Кусочек пирога с to_timestamp(). Вы прошли по ссылке, которую я дал? Если это все еще дает вам статику, опубликуйте еще один вопрос с примером того, что у вас есть и что вы хотите. - person Erwin Brandstetter; 09.11.2012
comment
Извините, вчера я допустил ошибку в командной строке. Теперь все в порядке, спасибо! Я использовал: ALTER TABLE table_name ALTER COLUMN hour_time type time USING to_timestamp(hour_time, 'HH24:MI:SS'); - person Lo Bizzarri; 09.11.2012