我有一个传统的postgres db,它具有将日期列强制转换为character(50)字段(不要问)。我想更改表和列以包含实际日期。因为这有效:
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');
但事实并非如此。有无知的线索吗?
这 恰好 符合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。
type character
type date