将 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_date
和 table_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.
您可以在其他数据库中进行类似操作,但具体代码略有不同。
我正在处理带有列 '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_date
和 table_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.
您可以在其他数据库中进行类似操作,但具体代码略有不同。