更新mysql中的日期格式

时间:2010-11-23 19:01:43

标签: mysql date-format

我正在制作一个表,其中有两种格式的日期存储在一个字段中,有些是mm / dd / yy,而较新的条目是yyyy / mm / dd,就像它们应该的那样。

我想运行像这样的查询

UPDATE table
   SET date_field = DATE_FORMAT(date_field, '%Y/%m/%d') 
 WHERE date_field = DATE_FORMAT(date_field, '%m/%d/%y')

但它没有成功。我得到的一个结果是,它只是将%m数据转换为%Y并且真正弄乱了数据。

有什么想法?

3 个答案:

答案 0 :(得分:15)

您想使用STR_TO_DATE函数,而不是DATE_FORMAT。另外,我假设你只想更新错误的日期,所以我想你可以这样做:

UPDATE your_table
SET date_field = DATE(STR_TO_DATE(date_field, '%m/%d/%Y'))
WHERE DATE(STR_TO_DATE(date_field, '%m/%d/%Y')) <> '0000-00-00';

P.S。表包含,而不是字段。并且您不应该使用字符串类型来保存日期,而是使用DATE类型

答案 1 :(得分:5)

您希望使用STR_TO_DATE首先将错误的字符串转换为实际日期对象,然后使用DATE_FORMAT将其重新转换为所需格式的字符串。

此外,您的WHERE条件无效。您应该使用LIKE来查找格式错误的字符串。

UPDATE your_table SET date_field =
    DATE_FORMAT(STR_TO_DATE(date_field, '%m/%d/%y'), '%Y/%m/%d') 
WHERE date_field LIKE '__/__/____'

答案 2 :(得分:1)

思考?啊,实际上是三个:

  • 不要重新发明轮子。是的,是的,我知道从头开始做的事情很诱人,之前只有一百万人发明过(没有讽刺意图),但MySQL有一个好的,有效的,可用的DATE格式,使用它;只对输入/输出进行格式化。这样可以避免这些数据混淆(日期本身)和表示(日期格式)。

  • 至于数据,还原已知良好的备份(你有备份,对吗?) - 在一般情况下,没有万无一失的方法来判断未转换的y / m / d来自已经转换的m / d / y,并且日期可以用于任何实际目的。 (尤其不是在2010年 - 例如08/10/09可能意味着几个有效日期。)

  • 另外,只存储2位日期的想法是什么?这正是那种短视的吝啬,带来了Y2K的时间和金钱汇。 (如果您以日期格式存储日期,则避免使用。)