MySQL:如何通过转换VARCHAR列中的所有值来设置DATE列?

时间:2019-05-16 09:17:35

标签: mysql

我有一个表,其中有一个名为“ DATE”的列,其中包含格式为“ 23-Nov-2017”的日期作为数据类型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列中的值仍然没有变化

1 个答案:

答案 0 :(得分: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;