select DATE_FORMAT('8:48:30 AM', '%H:%i:%s')
它返回 Null 为什么?
但是使用的时候
select DATE_FORMAT(CURTIME(), '%H:%i:%s')
它返回格式化的值。
该方法DATE_FORMAT
用于显示日期和时间,但是首先您没有分配除时间以外的任何日期,因此它正在抛出null
.
从手册 -
DATE_FORMAT 根据格式字符串格式化日期值。
在 MySql 5.5 版本中SELECT DATE_FORMAT( CURTIME( ) , '%H:%i:%s' )
返回null
DATE_FORMAT
的第一个参数是类型DATETIME
。在最近的 mysql 服务器版本上,您的查询都返回 NULL。
因此,您的问题的答案是,这种行为差异是由于您的 mysql 版本中的一个错误-以某种方式它将 转换TIME
为DATETIME
,而无法将字符串转换为DATETIME
.
这也是一个工作查询的示例:
select DATE_FORMAT(NOW(), '%H:%i:%s')
NOW()
返回一段DATETIME
时间CURTIME()
返回TIME
。
它返回 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
据我所知,我认为这是因为 MySQL 将函数识别为时间,因此知道如何处理它。而在第一个示例中,它将其视为字符串并且不知道如何处理它。