【问题标题】:STR_TO_DATE() returning NULL for some TIME valuesSTR_TO_DATE() 为某些 TIME 值返回 NULL
【发布时间】:2017-06-20 22:36:55
【问题描述】:

在我的一个项目中,我使用函数STR_TO_DATE() 将字符串转换为基于 fmt 格式字符串的日期值。例如将字符串转换为 DATE 值:

SELECT STR_TO_DATE('21-5-2013','%d-%m-%Y'); // returns 2013-05-21

但是当我将时间字符串转换为 TIME 值时,我得到了一些奇怪的行为:

SELECT STR_TO_DATE('203005','%h%i%s'); // returns null
SELECT STR_TO_DATE('19:30:05','%h:%i:%s'); // returns null
SELECT STR_TO_DATE('113005','%h%i%s'); // returns 11:30:05
SELECT STR_TO_DATE('01:30:05','%h:%i:%s'); // returns 01:30:05

我在 StackOverflow 中找到 here 的答案之一是:

这确实是因为 SQL 模式 NO_ZERO_DATE。

但我仍然对函数的行为很感兴趣。关注link

,您可以轻松查看我在说什么

【问题讨论】:

    标签: mysql datetime time


    【解决方案1】:

    为了避免null,我最终联系了约会对象。

    SELECT STR_TO_DATE(
          concat('01/01/2018', ' ', '19:30:05'),
          '%d/%m/%Y %H:%i:%s'
       ),
       '%H:%i:%s'
    );
    

    【讨论】:

      【解决方案2】:

      问题是您设置的格式,它识别时间从 0-12,而不是 0-23。应该是

      SELECT STR_TO_DATE('203005','%H%i%s');
      SELECT STR_TO_DATE('19:30:05','%H:%i:%s');
      

      查看以下链接,查看所有可用时间和日期格式的列表。 https://www.techonthenet.com/mysql/functions/str_to_date.php

      【讨论】:

      猜你喜欢
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2017-05-26
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      相关资源
      最近更新 更多