Alter character field to date

China☆狼群 提交于 2019-12-30 11:07:25

问题


I've a legacy postgres db that has date columns cast as character(50) fields (don't ask). I'd like to alter the table and columns to contain actual dates. Because this worked:

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

I naively thought this might work:

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

But it does not. Any clues for the clueless?


回答1:


This just works as intended by the OP. What we have here is a simple thinko/typo.
Read more in the manual about ALTER TABLE.
Demo:

-- 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;

Hint: You wrote type character instead of type date.




回答2:


It will take three stages:

1) Alter the table to add the date column.

2) Run an update query which converts each string date into the date field

3) Alter the table to remove the text date column.



来源:https://stackoverflow.com/questions/8099352/alter-character-field-to-date

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!