将 vachar 列更新为 postgreSQL 中的日期 [英] update vachar column to date in postgreSQL
问题描述
尝试更新具有 varchar
数据类型的列,例如'1950-08-14' 到 date
数据类型使用
Trying to update a column with varchar
datatype e.g. '1950-08-14' to a date
datatype using
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
推荐答案
查询:
ALTER TABLE tablename
ALTER COLUMN columnname TYPE DATE USING to_date(columnname, 'YYYY-MM-DD');
是正确的.
错误消息意味着您在 columnname
列中有无效值(实际上无效值是 'columnname').列中的所有值都必须采用YYYY-MM-DD"格式,例如'2015-01-01'(或为空).
The error message means that you have invalid value in column columnname
(actualy the invalid value is 'columnname').
All the values in the column must have the format 'YYYY-MM-DD', e.g. '2015-01-01' (or be null).
带有新列的解决方案.
创建一个函数将 varchar
转换为 date
,对于无效值返回 null
:
Create a function to convert varchar
to date
which returns null
for invalid values:
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 $$;
添加一个新列并使用函数更新它:
Add a new column and update it using the function:
alter table tablename add new_column date;
update tablename
set new_column = varchar_to_date_or_null(columnname);
这篇关于将 vachar 列更新为 postgreSQL 中的日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!