繁体   English   中英

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

[英]mySQL - How to change date format from dd-mm-yy to yy-mm-dd?

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

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

它们存储在VARCHAR字段中

日期示例如下:

2011-10-19和19-10-2011

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

提前致谢!

日期存储为日期,大概是字符串。

如果它们实际上已经是日期,则根据需要使用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}-";

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

注意:如果您需要执行更多操作,例如说您无法立即更改“日期为字符串”字段的填充,则还可以放置一个后插入/后更新触发器(mySQL现在支持)来执行此操作进行转换(从字符串字段到实际日期字段)。

您可以尝试这样的操作(但先备份表!):

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}-";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM