是否可以在MySQL列中更改日期值的格式?

时间:2016-02-21 14:59:58

标签: mysql date

今天使用的数据库是在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我们正在使用时间戳,所以它运行正常。真的想让其他列采用相同的格式。

希望拥有比我更好的专业知识的人有一些建议。

3 个答案:

答案 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;