尝试使用varchar
数据类型更新列,例如'1950-08-14'使用
date
数据类型
UPDATE tablename SET columnname = to_date(columnname, 'YYYY-MM-DD');
或
ALTER TABLE tablename ALTER COLUMN columnname TYPE DATE USING to_date(columnname, 'YYYY-MM-DD');
但都返回错误消息
ERROR: invalid value "columnname" for "YYYY"
DETAIL: Value must be an integer.
引用http://www.postgresql.org/docs/9.4/static/functions-formatting.html
答案 0 :(得分:2)
查询:
ALTER TABLE tablename
ALTER COLUMN columnname TYPE DATE USING to_date(columnname, 'YYYY-MM-DD');
是对的。
错误消息表示您在columnname
列中包含无效值(实际上,无效值为'列名')。
列中的所有值必须具有格式' YYYY-MM-DD',例如' 2015年1月1日' (或为空)。
使用新列的解决方案。
创建一个将varchar
转换为date
的函数,该函数返回null
表示无效值:
create or replace function varchar_to_date_or_null(str varchar)
returns date language plpgsql as $$
begin
return to_date(str, 'YYYY-MM-DD');
exception
when invalid_datetime_format then return null;
end $$;
添加新列并使用以下函数进行更新:
alter table tablename add new_column date;
update tablename
set new_column = varchar_to_date_or_null(columnname);