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
。