更改迄今为止的字符字段

时间:2011-11-11 20:09:13

标签: sql postgresql casting date

我有一个遗留的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 个答案:

答案 0 :(得分:4)

正常运作符合OP的预期。我们这里有一个简单的thinko /拼写错误 请阅读manual about 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

答案 1 :(得分:0)

需要三个阶段:

1)更改表格以添加日期列。

2)运行更新查询,将每个字符串日期转换为日期字段

3)更改表格以删除文本日期列。