在 postgreSQL 中将 varchar 列更新为最新
update vachar column to date in postgreSQL
尝试更新具有 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');
但都return错误信息
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'(或为空)。
新列的解决方案。
创建一个函数将 varchar
转换为 date
,其中 returns 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);
尝试更新具有 varchar
数据类型的列,例如使用
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');
但都return错误信息
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'(或为空)。
新列的解决方案。
创建一个函数将 varchar
转换为 date
,其中 returns 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);