将 vachar 列更新为 postgreSQL 中的日期 [英] update vachar column to date in postgreSQL

查看:56
本文介绍了将 vachar 列更新为 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆