我想将PostgreSQL数据库中的特定列从character_varying
类型更改为类型date
。日期格式为yyyy:mm:dd
我试着这样做:
alter table table_name
alter column date_time type date using (date_time::text::date);
但是我收到了一条错误消息:
日期/时间字段值超出范围:" 2011:06:15"
答案 0 :(得分:6)
当您将text
或varchar
投射到date
时,您的安装的默认日期格式是预期的 - 具体取决于您postgresql.conf
中的datestyle
设置
通常,冒号(:
)是 time 分隔符。在简单的演员表中,PostgreSQL可能会尝试将'2011:06:15'解释为时间 - 并且失败。 / p>
要消除歧义,请使用日期匹配模式的to_date()
:
ALTER TABLE table_name
ALTER COLUMN date_time type date
USING to_date(date_time, 'YYYY:MM:DD'); -- pattern for your example