【问题标题】:MySQL STR_TO_DATE() function returns nullMySQL STR_TO_DATE() 函数返回 null
【发布时间】:2016-01-09 17:23:59
【问题描述】:

我想将我的日期格式从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;

【问题讨论】:

  • 显示示例数据或更好地创建一个 sqlfiddle
  • dateTo 的值是多少?
  • FYI
  • 正如我的问题所述,我试图将日期从 MMMM dd, yyyy 格式转换。因此,我的 dateTo 的值将是该格式的任何日期。
  • 你为什么写%d-%m-%Y,那不是你的输入格式? o.O 难怪它不起作用!

标签: mysql str-to-date


【解决方案1】:

要先转换日期格式,您需要使用 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');

【讨论】:

    【解决方案2】:

    如果它返回 null 则意味着提取的日期时间值是非法的。您可以尝试如下。请参阅MySQL Documentation 了解更多信息。

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

    【讨论】:

    • 而且“非法”的定义似乎因版本和口味而异。例如SELECT str_to_date("4:00PM", "%l:%i%p") 在 MariaDB 5.5.5 上产生 16:00:00,但在 MySQL 5.7.18 上产生 NULL。对于后者,您可以选择任何年份/日期:SELECT str_to_date("1111-11-11 4:00PM", "%Y-%m-%d %l:%i%p")(如果您只需要它,请使用 'TIME()')。
    猜你喜欢
    • 2017-03-16
    • 2017-05-26
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多