【问题标题】:Replace character order MySQL field替换字符顺序 MySQL 字段
【发布时间】:2021-02-01 20:27:07
【问题描述】:

我有一个 mysql 列“datepicker”,我一直以这种格式“m/d/Y”存储日期,现在我想将现有数据更改为“d-m-Y”。是否有一个 UPDATE 命令可以快速查找所有匹配项,而无需为每个日期创建查询?

示例:

UPDATE `signup` SET `datepicker` = '18-12-2020' WHERE `datepicker` = '12/18/2020';

谢谢

【问题讨论】:

  • 不要将日期存储为字符串。 MySQL 有一个非常好的数据类型:DATE
  • 如果您的数据是字符串并且您想要更改这些字符串,您需要编写字符串操作逻辑来执行该更改。如果您的数据是实际日期值(列数据类型DATE),那么您不需要(或不想)这样做。你能澄清一下问题吗?
  • 提示:MySQL 和大多数 SQL 数据库一样,更喜欢ISO-8601 date format, YYYY-MM-DD。不要使用d-m-Y。转换它。使用DATEDATETIME 列来存储这些值。 d-m-Y 作为一种格式完全没用。排序后,您最终会在 2 月 1 日之后得到 1 月 10 日,这是假设它实际上不是 10 月 1 日和 1 月 2 日。
  • 所以也许可以更改 TYPE,并进行 DATE_FORMAT 转换,然后在脚本的其余部分调整该字段的格式?

标签: mysql date datetime datepicker format


【解决方案1】:

这确实是一个很好的举措。您正在将数据从非标准格式转换为 ISO8601 标准。如果将列的数据类型更改为DATE,那就更好了。但请先执行此操作。

您可以使用MySQL's date processing capabilities 来做您需要的事情。

从这个开始。它应该以您要离开的格式找到您的日期,并以 dbms 的规范日期格式显示它们。这是为了测试,因为 UPDATE 是破坏性的,你要确保它是正确的。

SELECT DATE(STR_TO_DATE(datepicker, '%c/%d/%Y')) new_datepicker, datepicker
  FROM signup
 WHERE datepicker RLIKE '^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$';

当你确定你在这里得到你想要的东西时,你可以这样做。

UPDATE signup
   SET datepicker = DATE(STR_TO_DATE(datepicker, '%c/%d/%Y'))
 WHERE datepicker RLIKE '^[0-9]{1,2}/[0-9]{1,2}/[0-9]{4}$';

现在您的datepicker 列中应该有正确的字符串格式了。

【讨论】:

  • 自己永远也想不通,谢谢!我在类型更改之前尝试了 str_to_date 和 dateformat 转换,但结果从未像预期的那样。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多