爲什麼SELECT STR_TO_DATE('07:30 PM','%H:%I %p');
返回NULL
?MySQL將時間轉換爲HH:MM
我希望看到19:30
更多的上下文:
我想,來查詢的時間列的值存儲爲HH:MM PM
表。例如:
SELECT * FROM table where (STR_TO_DATE(table.time, '%H:%I %p') < NOW())
爲什麼SELECT STR_TO_DATE('07:30 PM','%H:%I %p');
返回NULL
?MySQL將時間轉換爲HH:MM
我希望看到19:30
更多的上下文:
我想,來查詢的時間列的值存儲爲HH:MM PM
表。例如:
SELECT * FROM table where (STR_TO_DATE(table.time, '%H:%I %p') < NOW())
你已經損壞了一些格式代碼。它應該是'07:30 PM','%h:%i %p'
。 此外,你需要一個SQL模式,可以讓因爲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)
NOW()
返回datetime,像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())
查看原始文檔的位置:
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
它可能是一個錯字,因爲它只是似乎不可思議,但官方文檔狀態'%I'是小時和'%i'是分鐘。 (另外,它看起來像你可以使用'%r'作爲整個字符串。)[DATE_FORMAT](https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions。 html#function_date-format) – Uueerdo
@Uueerdo'%H'用於軍事時間,00-23,'%h'或'%I'用於標準時間00-12,AM/PM用'%p' 。 –
@JoeStefanelli是的,'%H'也可能導致它們的問題;我不明白'23:00 AM'可以如何優雅地處理。 – Uueerdo