2017-06-20 127 views
1

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

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

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

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

回答

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

+0

我必须复制/粘贴'选择STR_TO_DATE('19:30:05' , '%H:%I:%s' 的);'所提议的你和我仍然得到'null'任何想法,为什么?它适用于带日期值的字符串,但不适用于时间值 – awavi

+0

您可以检查w3schools,它的工作原理。 [https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_str_to_date](https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_str_to_date) 你也可以看到所有不同的您可以通过下面的链接[http://www.sqlines.com/mysql/functions/str_to_date](http://www.sqlines.com/mysql/functions/str_to_date)来编写这些方法。检查你的格式是否没有正确传递 –

0

我结束了约会日期做这样的事情,以避免有一个null

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