acm*_*ers 2 postgresql postgresql-9.4
尝试使用varchar数据类型(例如“1950-08-14”)将列更新为数据date类型
UPDATE tablename SET columnname = to_date(columnname, 'YYYY-MM-DD');
Run Code Online (Sandbox Code Playgroud)
或者
ALTER TABLE tablename ALTER COLUMN columnname TYPE DATE USING to_date(columnname, 'YYYY-MM-DD');
Run Code Online (Sandbox Code Playgroud)
但都返回错误信息
ERROR: invalid value "columnname" for "YYYY"
DETAIL: Value must be an integer.
Run Code Online (Sandbox Code Playgroud)
参考http://www.postgresql.org/docs/9.4/static/functions-formatting.html
查询:
ALTER TABLE tablename
ALTER COLUMN columnname TYPE DATE USING to_date(columnname, 'YYYY-MM-DD');
Run Code Online (Sandbox Code Playgroud)
是正确的。
错误消息意味着您在列中有无效值columnname(实际上无效值是“列名”)。列中的所有值都必须采用“YYYY-MM-DD”格式,例如“2015-01-01”(或为空)。
使用新列的解决方案。
创建一个函数以转换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 $$;
Run Code Online (Sandbox Code Playgroud)
添加一个新列并使用函数更新它:
alter table tablename add new_column date;
update tablename
set new_column = varchar_to_date_or_null(columnname);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |