为什么SELECT 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())
答案 0 :(得分:1)
function a(){
return {b: 'c'}
}
a().b //c
会返回日期时间,例如NOW()
。您可能希望比较时间,而不是日期,因为您没有比较实际的日期,只是时间。请尝试使用2014-11-22 12:45:34
。此外,CURTIME()
需要几个小时,您需要%I
分钟。 %i
格式为12小时,您需要%H
24小时格式。所以你的陈述应该更像是:
%h
请参阅此处的原始文件:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
答案 1 :(得分:1)
你破坏了一些格式代码。它应该是'07:30 PM','%h:%i %p'
。
此外,由于this:
未指定的日期或时间部分的值为0,因此str中未完全指定的值会生成一些或部分设置为0的结果
mysql> SET @@SESSION.sql_mode='TRADITIONAL';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT
-> STR_TO_DATE('07:30 PM','%H:%I %p') as original,
-> STR_TO_DATE('07:30 PM','%h:%i %p') as fixed;
+----------+-------+
| original | fixed |
+----------+-------+
| NULL | NULL |
+----------+-------+
1 row in set, 3 warnings (0.00 sec)
mysql> SET @@SESSION.sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT
-> STR_TO_DATE('07:30 PM','%H:%I %p') as original,
-> STR_TO_DATE('07:30 PM','%h:%i %p') as fixed;
+----------+----------+
| original | fixed |
+----------+----------+
| NULL | 19:30:00 |
+----------+----------+
1 row in set, 1 warning (0.00 sec)