MySQL将时间转换为HH:MM

MySQL将时间转换为HH:MM,mysql,datetime,time,Mysql,Datetime,Time,为什么选择STR_TO_DATE('07:30 PM','%H:%I%p')返回NULL 我希望看到19:30 更多背景: 我试图查询一个表,其中时间列值存储为HH:MM PM。例如: SELECT*FROM table where(STR_TO_DATE(table.time,%H:%I%p')

为什么
选择STR_TO_DATE('07:30 PM','%H:%I%p')返回
NULL

我希望看到
19:30

更多背景:

我试图查询一个表,其中时间列值存储为
HH:MM PM
。例如:

SELECT*FROM table where(STR_TO_DATE(table.time,%H:%I%p')
NOW()
返回日期时间,类似于
2014-11-22 12:45:34
。你可能想比较时间,而不是日期,因为你不是在比较实际的一天,只是时间。尝试改用
CURTIME()
。另外,
%I
表示小时,而
%I
表示分钟。而
%H
是12小时格式,而
%H
是24小时格式。所以你的陈述应该更像:

SELECT * FROM table where (STR_TO_DATE(table.time, '%h:%i %p') < CURTIME())
SELECT*FROM table where(STR_TO_DATE(table.time,'%h:%i%p')
以下是MySql文档中的格式代码表,供将来参考:

请参阅此处的原始文档:
NOW()
返回日期时间,类似于
2014-11-22 12:45:34
。你可能想比较时间,而不是日期,因为你不是在比较实际的一天,只是时间。尝试改用
CURTIME()
。另外,
%I
表示小时,而
%I
表示分钟。而
%H
是12小时格式,而
%H
是24小时格式。所以你的陈述应该更像:

SELECT * FROM table where (STR_TO_DATE(table.time, '%h:%i %p') < CURTIME())
SELECT*FROM table where(STR_TO_DATE(table.time,'%h:%i%p')
以下是MySql文档中的格式代码表,供将来参考:

请参阅此处的原始文档:

您弄乱了一些格式代码。它应该是
'07:30 PM','%h:%i%p'
。 此外,由于以下原因,您需要允许无效日期的SQL模式:

未指定的日期或时间部分的值为0,因此str中未完全指定的值将生成部分或全部部分设置为0的结果


你弄坏了一些格式代码。它应该是
'07:30 PM','%h:%i%p'
。 此外,由于以下原因,您需要允许无效日期的SQL模式:

未指定的日期或时间部分的值为0,因此str中未完全指定的值将生成部分或全部部分设置为0的结果


这可能是一个打字错误,因为它看起来很奇怪,但官方文档中的状态是
%I
表示小时,
%I
表示分钟。(或者,看起来你可以对整个字符串使用
%r
。@uuerdo
%H
表示军事时间00-23,
%H
%I
表示标准时间00-12,
%p
@JoeStefanelli给出AM/PM是的,
%H
也可能会给他们带来问题;我不知道如何优雅地处理
23:00 AM
。这可能是一个打字错误,因为它看起来很奇怪,但官方文件规定
%I
表示小时,
%I
表示分钟。(或者,看起来你可以对整个字符串使用
%r
。@uuerdo
%H
表示军事时间00-23,
%H
%I
表示标准时间00-12,
%p
@JoeStefanelli给出AM/PM是的,
%H
也可能会给他们带来问题;我看不出怎么能优雅地处理
23:00 AM