【问题标题】:Updating a date format in MySQL在 MySQL 中更新日期格式
【发布时间】:2010-11-23 19:01:42
【问题描述】:

我正在处理一个表格,该表格在一个字段中存储了两种格式的日期,其中一些在 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 并真正弄乱了数据。

有什么想法吗?

【问题讨论】:

  • date_field的列类型是什么?如果是日期或时间戳 - 您不能将 Ymd 重新排序为 mdy

标签: mysql date-format


【解决方案1】:

您想使用 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';

附:表格包含,而不是字段。而且你不应该使用字符串类型来保存你的日期,而是 DATE 类型

【讨论】:

  • 谢谢,那应该可以很好地解决这个问题。然后我们可以继续整理网站的其余部分。它从 ASP 到 PHP,从 MS SQL 到 MySQL!它仍然站立着,真是太神奇了!哈!
【解决方案2】:

您想先使用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 '__/__/____'

【讨论】:

    【解决方案3】:

    想法?啊,是的,实际上是三个:

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

    • 至于数据,恢复已知良好的备份(你有备份,对吗?) - 在一般情况下,没有万无一失的方法来判断未转换的 y/m /d 从已经转换的 m/d/y 和日期是 f***ed 用于任何实际目的。 (尤其是在 2010 年,例如 08/10/09 可能表示多个有效日期)。

    • 另外,只存储2位日期的想法是什么?正是这种目光短浅的吝啬造成了千年虫的时间和金钱损失。 (如果您以日期格式存储日期,则可以避免)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多