MySQL的STR_TO_DATE()函数返回null。

3

我希望将日期格式从MMMM dd,yyyy转换为yyyy-MM-dd

我尝试使用以下代码:

SET @dt_to = STR_TO_DATE(dateTo, '%d-%m-%Y');

但是返回了NULL值。

如何在MySQL中将我的日期转换为yyyy-MM-dd格式?

编辑:

我正在创建一个存储过程,其中dateTo的值会作为参数接收。它是以MMMM dd, yyyy格式表示的日期。例如:October 10, 2015

注意:

当我使用以下语句时,整个查询不会返回NULL

SET @dt_to = dateTo;

2
展示样本数据或者更好地,创建一个 SQLFiddle。 - Jens
dateTo 的值是多少? - Aroniaina
FYI - Bhargav Modi
如我在问题中所述,我尝试将日期从 MMMM dd, yyyy 格式转换。因此,我的 dateTo 值将是该格式中的任何日期。 - ThEpRoGrAmMiNgNoOb
为什么你写了%d-%m-%Y,而这不是你的输入格式?哦哦,难怪它不能工作! - Lightness Races in Orbit
3个回答

6

要转换日期格式,首先需要使用STR_TO_DATE将输入字符串转换为日期值

SET @dt_to = STR_TO_DATE(dateTo, '%M %d,%Y');

然后将该日期值转换为您所需的格式

SET @dt_converted = DATE_FORMAT(dt_to, '%Y-%m-%d');

或者一次性完成所有任务
SET @dt_to = DATE_FORMAT(STR_TO_DATE(dateTo, '%M %d,%Y'), '%Y-%m-%d');

3

如果返回null则意味着提取的日期时间值是不合法的。你可以尝试以下方法。有关更多信息,请参见MySQL文档

SELECT STR_TO_DATE('October 10, 2015','%M %d,%Y');

3
“非法”的定义似乎在不同版本和类型之间存在差异。 例如,在MariaDB 5.5.5上,SELECT str_to_date("4:00PM", "%l:%i%p")将产生16:00:00,但是在MySQL 5.7.18上将得到NULL。对于后者,您可以使用任何年份/日期:SELECT str_to_date("1111-11-11 4:00PM", "%Y-%m-%d %l:%i%p")(如果只需要时间,则可以使用'TIME()'进行包装)。 - Max

0
在我的情况下,我得到了NULL,因为我只提供了月份和年份。MySQL的某些版本会推断日期(1号),但明确指定日期可以解决这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接