mySQL - 如何将日期格式从dd-mm-yy更改为yy-mm-dd?

时间:2012-03-24 15:00:07

标签: mysql database date formatting date-format

我的数据库中有一些日期格式为dd-mm-yy,有些日期为yy-mm-dd

我希望他们都在yy-mm-dd

它们存储在VARCHAR字段

示例日期是:

2011-10-19和19-10-2011

是否有查询要运行以更新为任何不符合此格式的查询?

提前致谢!

2 个答案:

答案 0 :(得分:3)

日期存储为日期,可能是您有字符串。

如果他们已经是实际日期,请根据需要使用DATE_FORMAT

如果它们是字符串,您最好的选择是将它们更改为实际日期,并将日期值存储在新列中。否则,在路上你会继续遇到很多问题,如Tony所说(+1 Tony!)。

然后,您可以使用STR_TO_DATE填充它,例如

update tbl set new_date_field =
select STR_TO_DATE(string_date_field,'%y-%m-%d') ` # if string_date_field is '2011-01-01'
WHERE string_date_field RLIKE "^[0-9]{2}-";

获得真实日期后,您可以使用DATE_FORMAT(date_field, '%y-%m-%d')

进行显示

如果你不能添加字段,唯一的另一个选择是进行字符串操作,即
Update table set date_field =
substr(string_date_field,7,2) + '-' + substr(string_date_field,3,2) + '-' + substr(string_date_field,0,2) WHERE string_date_field RLIKE "^[0-9]{2}-";

即使这样,我仍然会推荐一个新的领域。

注意:如果您需要在更多步骤中执行此操作,请说您无法立即更改'date as string'字段的填充,您还可以添加post / post更新触发器(mySQL现在支持)继续进行转换(从字符串字段到实际日期字段)。

答案 1 :(得分:2)

你可以试试这样的东西(但先备份你的桌子!):

UPDATE table SET string_date_field = STR_TO_DATE(string_date_field, "%d-%m-%Y")
WHERE string_date_field RLIKE "^[0-9]{2}-";

RLIKE是REGEXP的同义词,您可以使用它来查找日期为有问题的%d-%m-%Y格式的记录。之后您可以更改表格,以便字段类型为DATE。此外,如果您的表有大量记录,也许您应该使用连续自动增量字段(当然存在一个当然!)来间隔执行此操作,以创建较小的记录集供服务器处理。例如:

UPDATE table SET string_date_field = STR_TO_DATE(string_date_field, "%d-%m-%Y")
WHERE ID >= 1000000 AND ID < 2000000 AND string_date_field RLIKE "^[0-9]{2}-";