STR_TO_DATE()为某些TIME值返回NULL

时间:2017-06-20 22:36:55

标签: mysql datetime time

在我的一个项目中,我使用函数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

轻松查看我正在谈论的内容

2 个答案:

答案 0 :(得分:3)

问题是您正在设置的格式,它会识别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

答案 1 :(得分:1)

我最终将日期与这样的事情联系起来,以避免出现<div class="row"> <div class="form-group col-sm-6"> <label>Name <i class="fa fa-asterisk text-danger"></i> </label> <input type="text" class="form-control" id="myEl" value.bind="location.name & validate"> </div> </div>

null