1
我發現MySQL的函數STR_TO_DATE()
有些奇怪。它似乎無法解析倍,像這樣:如果僅用時間組件調用MySQL的STR_TO_DATE(),則返回NULL
它可以在一個完整的字符串:
mysql> SELECT STR_TO_DATE('08/07/16 11:59 AM', '%m/%d/%y %l:%i %p');
+-------------------------------------------------------+
| STR_TO_DATE('08/07/16 11:59 AM', '%m/%d/%y %l:%i %p') |
+-------------------------------------------------------+
| 2016-08-07 11:59:00 |
+-------------------------------------------------------+
1 row in set (0.00 sec)
日期僅適用於:
mysql> SELECT STR_TO_DATE('08/07/16', '%m/%d/%y');
+-------------------------------------+
| STR_TO_DATE('08/07/16', '%m/%d/%y') |
+-------------------------------------+
| 2016-08-07 |
+-------------------------------------+
1 row in set (0.00 sec)
時間只有不到:
mysql> SELECT STR_TO_DATE('11:59 AM', '%l:%i %p');
+-------------------------------------+
| STR_TO_DATE('11:59 AM', '%l:%i %p') |
+-------------------------------------+
| NULL |
+-------------------------------------+
1 row in set, 1 warning (0.00 sec)
格式化工作時間:
mysql> SELECT DATE_FORMAT(NOW(), '%l:%i %p');
+--------------------------------+
| DATE_FORMAT(NOW(), '%l:%i %p') |
+--------------------------------+
| 1:58 PM |
+--------------------------------+
1 row in set (0.00 sec)
但格式化時間,然後使用相同的格式字符串將其切回。
mysql> SELECT STR_TO_DATE(DATE_FORMAT(NOW(), '%l:%i %p'), '%l:%i %p');
+---------------------------------------------------------+
| STR_TO_DATE(DATE_FORMAT(NOW(), '%l:%i %p'), '%l:%i %p') |
+---------------------------------------------------------+
| NULL |
+---------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
作爲一種變通方法,我結束了做:
mysql> SELECT TIME(STR_TO_DATE('08/07/16 11:59 AM', '%m/%d/%y %l:%i %p'));
+-------------------------------------------------------------+
| TIME(STR_TO_DATE('08/07/16 11:59 AM', '%m/%d/%y %l:%i %p')) |
+-------------------------------------------------------------+
| 11:59:00 |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
的數據存儲在一個巨大的CSV文件的方式,所以編輯這將是一個痛苦。我只是想知道這是否正常,或者我忽視了簡單的事情。如果它的事項
服務器信息:
mysql> status
--------------
mysql Ver 14.14 Distrib 5.7.13, for Linux (x86_64) using EditLine wrapper
Connection id: 19
Current database:
Current user: [email protected]
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.13-log MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/run/mysqld/mysqld.sock
Uptime: 29 min 10 sec
這是問題。我甚至沒有想過用那個函數來檢查那個行爲。爲了避免使用模式,我使用'SET sql_mode =(SELECT REPLACE(@@ sql_mode,'NO_ZERO_DATE',''));' – emaNoN
您可能還需要 SET sql_mode =(SELECT REPLACE(@@ sql_mode,' NO_ZERO_IN_DATE',''));' –