1
select  DATE_FORMAT('8:48:30 AM', '%H:%i:%s')

它返回 Null 为什么?

但是使用的时候

select  DATE_FORMAT(CURTIME(), '%H:%i:%s')

它返回格式化的值。

4

4 回答 4

2

该方法DATE_FORMAT用于显示日期和时间,但是首先您没有分配除时间以外的任何日期,因此它正在抛出null.

从手册 -

DATE_FORMAT 根据格式字符串格式化日期值。

在 MySql 5.5 版本中SELECT DATE_FORMAT( CURTIME( ) , '%H:%i:%s' )返回null

于 2013-07-11T04:03:32.317 回答
2

DATE_FORMAT的第一个参数是类型DATETIME。在最近的 mysql 服务器版本上,您的查询都返回 NULL。

因此,您的问题的答案是,这种行为差异是由于您的 mysql 版本中的一个错误-以某种方式它将 转换TIMEDATETIME,而无法将字符串转换为DATETIME.

这也是一个工作查询的示例:

select  DATE_FORMAT(NOW(), '%H:%i:%s')

NOW()返回一段DATETIME时间CURTIME()返回TIME

于 2013-07-11T04:06:35.953 回答
2

它返回 NULL 是因为 MySQL 没有成功地将字符串解析为有效值DATETIME

要解决此问题,请使用该STR_TO_DATE函数将字符串解析为一个TIME值,

SELECT STR_TO_DATE('8:48:30 AM', '%h:%i:%s %p') 

然后,要将TIME值转换为特定格式的字符串,请使用该TIME_FORMAT函数,例如 24 小时制表示:

SELECT TIME_FORMAT(STR_TO_DATE( '8:48:30 AM', '%h:%i:%s %p'),'%H:%i:%s')

返回:

--------
08:48:30
于 2013-07-11T05:01:52.397 回答
0

据我所知,我认为这是因为 MySQL 将函数识别为时间,因此知道如何处理它。而在第一个示例中,它将其视为字符串并且不知道如何处理它。

于 2013-07-11T04:01:15.390 回答