【发布时间】:2013-07-19 23:27:17
【问题描述】:
我将日期存储为
varchar(256) latin1_swedish_ci
显示为:11/22/2012
现在我想将现有数据和列转换为 DATE
在 SQL 中最简单的方法是什么
谢谢
【问题讨论】:
我将日期存储为
varchar(256) latin1_swedish_ci
显示为:11/22/2012
现在我想将现有数据和列转换为 DATE
在 SQL 中最简单的方法是什么
谢谢
【问题讨论】:
为了安全起见,我个人会添加一个新列,传输数据,然后删除
update `table` set `new_col` = str_to_date( `old_col`, '%m/%d/%Y' ) ;
在删除列之前检查数据是否正常。
【讨论】:
编辑转换现有数据使用:
STR_TO_DATE(t.datestring, '%d/%m/%Y')
您可能需要创建一个临时表来保存数据以进行转换:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
然后你可以截断表格:
TRUNCATE [TABLE] tbl_name
然后您可以更改列数据类型:
ALTER TABLE tablename MODIFY columnname DATE;
然后你可以从临时表重新加载:
INSERT INTO table
SELECT temptable.column1, temptable.column2 ... temptable.columnN
FROM temptable;
【讨论】:
mm/dd/yyyy 是 MySQL 将解析的日期格式。
使用STR_TO_DATE 函数。
创建一个具有正确数据类型的新列,使用STR_TO_DATE 函数将字符串从旧列移到新列中,然后删除旧列。
UPDATE table SET new_col = STR_TO_DATE(old_col);
【讨论】: