mySQL-如何将日期格式从年月日更改为年月日?

mySQL-如何将日期格式从年月日更改为年月日?,mysql,database,date,formatting,date-format,Mysql,Database,Date,Formatting,Date Format,我的数据库中有一些日期是dd-mm-yy格式的,还有一些是yy-mm-dd格式的 我希望他们都在年月日 它们存储在VARCHAR字段中 例如: 2011-10-19和19-10-2011 是否要运行查询以更新为非此格式的任何查询 提前谢谢 日期存储为日期,可能您有字符串 如果它们已经是实际日期,只需根据需要使用DATE\u格式 如果它们是字符串,最好的选择是将它们更改为实际日期,并将日期值存储在新列中。否则,正如Tony所指出的(+1 Tony!),在未来的道路上,你将继续有很多问题需要处理 然

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

我希望他们都在年月日

它们存储在VARCHAR字段中

例如:

2011-10-19和19-10-2011

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


提前谢谢

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

如果它们已经是实际日期,只需根据需要使用
DATE\u格式

如果它们是字符串,最好的选择是将它们更改为实际日期,并将日期值存储在新列中。否则,正如Tony所指出的(+1 Tony!),在未来的道路上,你将继续有很多问题需要处理

然后,您可以用
STR\u TO\u 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\u格式(日期字段,%y-%m-%d')来显示它了。

如果无法添加字段,唯一的其他选项是执行字符串操作,即
updatetable set date\u字段=
substr(字符串日期字段,7,2)+'-'+substr(字符串日期字段,3,2)+'-'+substr(字符串日期字段,0,2) 其中字符串_date_字段RLIKE“^[0-9]{2}-”;

即使这样,我还是会推荐一个新领域


注意:如果您需要执行更多步骤,比如说您不能立即更改“日期为字符串”字段的填充,您还可以放入一个post insert/post update触发器(mySQL现在支持该触发器)来进行转换(从字符串字段到实际日期字段)。

日期存储为日期,大概你有弦吧

如果它们已经是实际日期,只需根据需要使用
DATE\u格式

如果它们是字符串,最好的选择是将它们更改为实际日期,并将日期值存储在新列中。否则,正如Tony所指出的(+1 Tony!),在未来的道路上,你将继续有很多问题需要处理

然后,您可以用
STR\u TO\u 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\u格式(日期字段,%y-%m-%d')来显示它了。

如果无法添加字段,唯一的其他选项是执行字符串操作,即
updatetable set date\u字段=
substr(字符串日期字段,7,2)+'-'+substr(字符串日期字段,3,2)+'-'+substr(字符串日期字段,0,2) 其中字符串_date_字段RLIKE“^[0-9]{2}-”;

即使这样,我还是会推荐一个新领域


注意:如果您需要执行更多的步骤,比如说您不能立即更改“日期为字符串”字段的填充,您还可以放入一个post insert/post update触发器(mySQL现在支持该触发器)来进行转换(从字符串字段到实际日期字段)。

您可以尝试类似的方法(但首先要备份您的表!):

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

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}-";
updatetable SET string\u date\u field=STR\u TO\u date(string\u date\u field,“%d-%m-%Y”)
其中ID>=1000000,ID<2000000,字符串_date_字段RLIKE“^[0-9]{2}-”;

您可以尝试类似的方法(但首先要备份您的表!):

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

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}-";
updatetable SET string\u date\u field=STR\u TO\u date(string\u date\u field,“%d-%m-%Y”)
其中ID>=1000000,ID<2000000,字符串_date_字段RLIKE“^[0-9]{2}-”;

你是如何存储日期的?哪种类型的字段?不管怎样,看看这个:你怎么知道它们是哪种格式的?比如,
09-10-11
:是2011年10月9日,还是2009年10月11日?更新了帖子ruakh:)干杯大雄-看着大雄-我用帖子中的代码做到了:)更新用户设置注册日期=日期(STR-TO-date(注册日期,%Y-%m-%d')),其中日期(STR-TO-date(注册日期,%d-%m-%Y'));你是如何存储日期的?哪种类型的字段?总之,看看这个:你如何判断日期的格式?例如,
09-10-11
:是2011年10月9日,还是2009年10月11日?更新了帖子ruakh:)Cheers Nobita-看起来很像Cheers Nobita-我用那篇文章中的代码做到了:)更新用户设置注册日期=日期(STR_TO_date(注册日期),%Y-%m-%d')),其中日期(STR_TO_date(注册日期),%d-%m-%Y');事实上,将日期存储为字符串是一件非常麻烦的事。是的,OP后来添加了这一点。事实上,将日期存储为字符串是一件非常麻烦的事。是的,OP后来添加了这一点。