2012-02-24 166 views
3

我有一个日期字段(tinytext),格式为“dd-mm-yy”,例如07-01-90。使用mysql查询我想将其更改为yyyy-mm-dd日期格式。我尝试了下面的代码,但没有任何反应。mysql更改日期格式

mysql_query("UPDATE Table SET date=STR_TO_DATE('date','%Y,%m,%d')"); 
+1

尝试用['DATE_FORMAT()'](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html #function_date-format) – diEcho 2012-02-24 07:32:47

回答

6

您使用的是正确的功能STR_TO_DATE(str,format)要达到的目标,但你妈王两个错误:

  1. 在查询中format参数不匹配的字符串表达式格式。你说它是dd-mm-yy格式,而你通过%Y,%m,%d(逗号分隔)到format的说法。该查询将返回“错误的日期时间值”错误。你应该使用%d-%m-%Y
  2. 通过设置传递的值的不同类型,您无法即时更改列的数据类型。您必须先更新这些值,然后更改列的数据类型。

所以,总结:

mysql_query("UPDATE `Table` SET `date` = STR_TO_DATE(`date`, '%d-%m-%Y')"); 
mysql_query("ALTER TABLE `Table` CHANGE COLUMN `date` `date` DATE"); 

此外,考虑到位老slowly deprecatedmysql扩展切换到推荐PDO扩展。

0

如果您使用的PHP my_sql,您可以使用date功能

1
  1. 要显示位数的年份

    mysql_query("UPDATE Table SET date=DATE_FORMAT(date,'%y-%m-%d')");

  2. 要显示位年份

    mysql_query("UPDATE Table SET date=DATE_FORMAT(date,'%Y-%m-%d')");

+0

此查询不转换格式...它可能是因为该字段是“tinytext”而不是DATE或TIMESTAMP。 – mustafa 2012-02-24 07:56:26

+0

你的意思是变量'date'是varchar类型? – 2012-02-24 10:29:31

+0

它是小文本类型。 – mustafa 2012-02-24 13:42:59

1

DATE_FORMAT()功能试试吧。

mysql_query("UPDATE Table SET date=DATE_FORMAT(date,'%Y,%m,%d')"); 
1

我说你必须这样做:

UPDATE table_name SET date = DATE_FORMAT('date', %Y-%m-%d); 
5

错误在查询

是STR_TO_DATE(日期, '%Y-%间%d'

mysql_query("UPDATE Table SET date=STR_TO_DATE(date,'%Y-%m-%d')"); 
2

试试这个:

INSERT INTO table(date_field) VALUES(STR_TO_DATE('December 8, 2010','%M %d,%Y'));