将 Varchar 列中的所有数据转换为日期格式

Converting all data in a Varchar column to a date format

我正在处理带有列 'Expiry Date' 的 table,作为一个 varchar,所有数据的格式都设置为 DD/MM/YYYY。

table的创建者在此到期日期列中使用了错误的类型,现在客户端需要过滤并显示当前日期前后的所有记录作为时间。这意味着需要将类型更改为日期或日期时间类型才能使用 CURDATE() 函数。

但是,值的当前格式不满足并且不允许更改类型,除非将格式更改为 YYYY-MM-DD(或类似格式)。

有没有什么方法可以批量格式化此列中的值,并且仅此列中的值有数千个条目,一个一个地格式化会非常耗时。

您需要更新该专栏,但我建议您在更新之前检查结果是否符合您的要求。

select replace(expiry_date, '/', '-') new_expiry_date
  from table_name

如果这个returns你想要的结果可以运行进行以下更新:

update table_name
   set expiry_date = replace(expiry_date, '/', '-')

当然,您需要将 expiry_datetable_name 替换为您的列名称和 table。

假设您使用的是 MySQL。

也许最简单的方法是添加一个生成的日期列:

alter table t add column expiry_date_date as
    (str_to_date(expiry_date, '%d/%m/%Y'));

你也可以修复数据:

update t
    set expiry_date = str_to_date(expiry_date, '%d/%m/%Y');

这会将 str_to_date() 的结果隐式转换为日期,格式为 YYYY-MM-DD。

更重要的是,您可以这样做:

alter table t modify column expiry_date date;

Here 是一个 db<>fiddle.

您可以在其他数据库中进行类似操作,但具体代码略有不同。