【问题标题】:MySQL: How to set a DATE column by converting all values in a VARCHAR column?MySQL:如何通过转换 VARCHAR 列中的所有值来设置 DATE 列?
【发布时间】:2019-05-16 09:17:34
【问题描述】:

我有一个表,其中有一个名为“DATE”的列,其中包含格式为“2017 年 11 月 23 日”的日期作为数据类型 VARCHAR。我正在尝试转换此 VARCHAR 列并将其存储在数据类型为 DATE 的名为“NEWDATE”的新列中。

我创建了 DATE 类型的新列“NEWDATE”,我正在尝试使用 STR_TO_DATE() 函数来执行转换。但是,由于某种原因,我无法让它工作。

UPDATE table SET NEWDATE = STR_TO_DATE(DATE,'%d-%m-%Y');

NEWDATE 列在语句之后没有更新任何值。我猜这意味着该语句没有执行。我做错了什么?

编辑:我也尝试过 STR_TO_DATE(DATE,'%d-%b-%Y')。但是 NEWDATE 列中的值仍然没有变化

【问题讨论】:

  • 或许在这里你能找到答案。 stackoverflow.com/questions/4706289/…
  • 您的格式'%d-%m-%Y' 与您的实际日期字符串不匹配!!!!!!
  • '扫描从 str 的开头开始,如果发现格式不匹配则失败' - 所以我猜你的数据看起来不像你想象的那样。
  • @P.Salmon 我怎样才能知道它是否不是?我复制粘贴了其中一个值以检查是否有任何额外的空格/看不见的字符等。但情况似乎并非如此

标签: mysql


【解决方案1】:

您的格式“%d-%m-%Y”与您的实际日期字符串“23-Nov-2017”不匹配

%m 是数字月份,您有一个缩写文本月份 将 %b 用于 3 个字符的月份值,如下所示:

STR_TO_DATE(DATE,'%d-%b-%Y')

编辑:工作台问题

这只是一个 Workbench 配置设置,可防止您意外发布巨大的更新。您可以关闭该设置,也可以通过给它一个 WHERE 子句让它像下面这样运行来稍微调整一下它。下面假设这个表有一个id

UPDATE table SET NEWDATE = STR_TO_DATE(DATE,'%d-%b-%Y') WHERE id<10000000;

或者

UPDATE table SET NEWDATE = STR_TO_DATE(DATE,'%d-%b-%Y') WHERE id>0;

【讨论】:

  • 我也试过这个。发生同样的事情,列没有变化。
  • 嗯,然后有别的东西妨碍了
  • 还有其他想法吗?如果需要,我可以为您提供更多信息
  • 我会首先检查您的所有文本日期是否都具有该格式。但即使有些不是这种格式,也应该将更新应用到它们。
  • 你是如何运行这个查询的,我的意思是你使用的是 MySQL WorkBench 或 phpMyAdmin 之类的工具或编程语言
猜你喜欢
  • 2016-12-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 2019-07-30
  • 2013-08-29
  • 2013-12-08
相关资源
最近更新 更多