小编典典

更改字符字段为日期

sql

我有一个传统的postgres db,它具有将日期列强制转换为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');

但事实并非如此。有无知的线索吗?


阅读 177

收藏
2021-04-07

共1个答案

小编典典

恰好 符合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

2021-04-07