我有一个遗留的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');
但事实并非如此。任何无能的线索?
答案 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)更改表格以删除文本日期列。