今天使用的数据库是在5年前制作的,某些日期字段/列中的条目采用欧洲字符串格式,在2013年2月29日而不是2013-05-29,最后一个有点像标准。
对今天的设置表示遗憾,但由于缺乏对该主题的了解,多年前就已经这样做了。
是否可以重写这些列值? 或者作为第二种解决方案,也许从旧列中获取数据并在进行转换时将它们写入新列?
每一行都有唯一的ID - testid
数据库看起来像这样:
testid date1 date2 date3
--------------------------------------------------
001 2012-01-01 02.01.2012 04.01.2012
002 2012-03-03 05.03.2012 10.03.2012
在date1
我们正在使用时间戳,所以它运行正常。真的想让其他列采用相同的格式。
希望拥有比我更好的专业知识的人有一些建议。
答案 0 :(得分:3)
您可以更新列并使用字符串函数:
include('/var/www/myapp/assets/contact.php');
执行此操作后,您甚至可以更改列的类型:
include('http://example.com/myapp/assets/contact.php');
编辑:
实际格式是dd.mm.yyyy而不是mm.dd.yyyy,所以:
update t
set date2 = concat_ws('-', left(date2, 4), right(date2, 2), substr(date2, 4, 2)),
date3 = concat_ws('-', left(date3, 4), right(date3, 2), substr(date3, 4, 2));
答案 1 :(得分:2)
update t set date2=str_to_date(date2, '%d.%m.%Y'), date3=str_to_date(date3,'%d.%m.%Y');
alter table t modify date2 date;
alter table t modify date3 date;
答案 2 :(得分:0)
看看here。
首先,我建议将字符串转换为正确的格式(但将它们保存为字符串),如下所示:
update mytable set date2 = cast(str_to_date(date2, '%d.%m.%Y') as char(10)),
date3 = cast(str_to_date(date3, '%d.%m.%Y') as char(10));
我不确定cast(... as char(10))
是否真的是必要的。然后,在第二步中更改列的数据类型:
alter table mytable modify date2 date;
alter table mytable modify date3 date;