Изменить поле персонажа на сегодняшний день - PullRequest
2 голосов
/ 12 ноября 2011

У меня есть устаревшая база данных postgres, в которой столбцы даты отлиты как поля character(50) (не спрашивайте).Я хотел бы изменить таблицу и столбцы, чтобы содержать фактические даты.Потому что это сработало:

select distinct to_date(date_begin, 'YYYY DD MM') from dates;

Я наивно думал, что это может сработать:

alter table dates alter column date_begin type character
using to_date(date_begin, 'YYYY DD MM');

Но это не так.Какие-нибудь подсказки для невежественных?

Ответы [ 2 ]

4 голосов
/ 12 ноября 2011

Это просто работает , как задумано OP. То, что мы имеем здесь, - это простая мысль / опечатка.
Подробнее в руководстве об ALTER TABLE .
Демонстрация:

-- DROP SCHEMA x CASCADE;
CREATE SCHEMA x;
CREATE TABLE x.tbl(date_begin character(50));
INSERT INTO x.tbl VALUES ('2011-11-11 11:11'), (NULL), (''), ('1977');
-- NULL and empty string work too
-- even just YYYY works: '1977' .. is converted to '1977-01-01' automatically
-- empty string produce a possibly surprising result: '0001-01-01 BC'

ALTER TABLE x.tbl ALTER COLUMN date_begin TYPE date USING to_date(date_begin, 'YYYY DD MM');

SELECT * FROM x.tbl;

Подсказка: вы написали type character вместо type date.

0 голосов
/ 12 ноября 2011

Это займет три этапа:

1) Измените таблицу, чтобы добавить столбец даты.

2) Запустите запрос на обновление, который преобразует каждую строковую дату в поле даты

3) Измените таблицу, чтобы удалить текстовый столбец даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...