MySQL将时间转换为HH:MM

时间:2017-05-31 16:06:17

标签: mysql datetime time

为什么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())

2 个答案:

答案 0 :(得分:1)

function a(){ return {b: 'c'} } a().b //c 会返回日期时间,例如NOW()。您可能希望比较时间,而不是日期,因为您没有比较实际的日期,只是时间。请尝试使用2014-11-22 12:45:34。此外,CURTIME()需要几个小时,您需要%I分钟。 %i格式为12小时,您需要%H 24小时格式。所以你的陈述应该更像是:

%h

为了将来参考,这里是MySql文档中的格式代码表: enter image description here

请参阅此处的原始文件:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

答案 1 :(得分:1)

你破坏了一些格式代码。它应该是'07:30 PM','%h:%i %p'。 此外,由于this

,您需要一种允许无效日期的SQL模式
  

未指定的日期或时间部分的值为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)