在這里,我將 date1 和 time1 設為 -
SELECT @date1;
----------
| @date1 |
----------
| %D %b %Y |
----------
SELECT @time1;
--------------------
| @time1 |
--------------------
| %Ih : %im : %ss %p |
--------------------
現在,我有以下有效查詢 -
SELECT NOW(6) AS output1, DATE_FORMAT(NOW(6), @date1) AS output2, STR_TO_DATE(DATE_FORMAT(NOW(6), @date1), @date1) AS output3;
---------------------------- --------------- ----------------------------
| output1 | output2 | output3 |
---------------------------- --------------- ----------------------------
| 2021-12-27 02:08:18.282722 | 27th Dec 2021 | 2021-12-27 00:00:00.000000 |
---------------------------- --------------- ----------------------------
SELECT NOW(6) AS output1, DATE_FORMAT(NOW(6), CONCAT_WS(SPACE(2), @date1, @time1)) AS output2, STR_TO_DATE(DATE_FORMAT(NOW(6), CONCAT_WS(SPACE(2), @date1, @time1)), CONCAT_WS(SPACE(2), @date1, @time1)) AS output3;
---------------------------- ----------------------------------- ----------------------------
| output1 | output2 | output3 |
---------------------------- ----------------------------------- ----------------------------
| 2021-12-27 02:12:48.713278 | 27th Dec 2021 02h : 12m : 48s AM | 2021-12-27 02:12:48.000000 |
---------------------------- ----------------------------------- ----------------------------
現在我嘗試以下 -
SELECT NOW(6) AS output1, DATE_FORMAT(NOW(6), @time1) AS output2, STR_TO_DATE(DATE_FORMAT(NOW(6), @time1), @time1) AS output3;
---------------------------- -------------------- ---------
| output1 | output2 | output3 |
---------------------------- -------------------- ---------
| 2021-12-27 02:20:12.335700 | 02h : 20m : 12s AM | NULL |
---------------------------- -------------------- ---------
SELECT CURTIME(6) AS output1, DATE_FORMAT(CURTIME(6), @time1) AS output2, STR_TO_DATE(DATE_FORMAT(CURTIME(6), @time1), @time1) AS output3;
----------------- -------------------- ---------
| output1 | output2 | output3 |
----------------- -------------------- ---------
| 02:16:53.952314 | 02h : 16m : 53s AM | NULL |
----------------- -------------------- ---------
SELECT CURTIME(6) AS output1, TIME_FORMAT(CURTIME(6), @time1) AS output2, STR_TO_DATE(TIME_FORMAT(CURTIME(6), @time1), @time1) AS output3;
----------------- -------------------- ---------
| output1 | output2 | output3 |
----------------- -------------------- ---------
| 02:18:33.676080 | 02h : 18m : 33s AM | NULL |
----------------- -------------------- ---------
在上述所有情況下,我得到 output3 作為 NULL
似乎只有當我手動輸入值時,我才能生成所需的結果 -
SELECT STR_TO_DATE("02h : 26m : 26s AM", "%Ih : %im : %ss %p") AS output;
----------
| output |
----------
| 02:26:26 |
----------
即使以下查詢似乎也不起作用 -
SELECT STR_TO_DATE("02h : 26m : 26s AM", @time1) AS output;
--------
| output |
--------
| NULL |
--------
現在,這很奇怪。如果有任何date格式存在或不存在time格式,則STR_TO_DATE對生成的值作業正常。但是如果只有time格式而沒有任何date格式,則STR_TO_DATE不再適用于生成的值。在這種情況下,STR_TO_DATE只能使用手動輸入的值。
這顯然是一個巨大的不便,因為很少有人只手動輸入值,并且通常會在實際應用中使用生成的值。
現在沒有像STR_TO_TIMEMySQL那樣的東西。
那么有什么解決方法嗎?還是唯一的出路是提出功能請求并等待未來新的改進版本?
更新:
有趣的是,以下作業完美 -
SELECT NOW(6) AS output1, DATE_FORMAT(NOW(6), GET_FORMAT(TIME, "USA")) AS output2, STR_TO_DATE(DATE_FORMAT(NOW(6), GET_FORMAT(TIME, "USA")), GET_FORMAT(TIME, "USA")) AS output3;
---------------------------- ------------- ----------
| output1 | output2 | output3 |
---------------------------- ------------- ----------
| 2021-12-27 03:26:04.787166 | 03:26:04 AM | 03:26:04 |
---------------------------- ------------- ----------
uj5u.com熱心網友回復:
我遇到這樣的事情之前,它在MySQL V5.7好像,你不能STR_TO_DATE在time單獨的值,你將需要date價值為好。這有效:
SET @time1 = '%Y-%m-%d %Ih : %im : %ss %p';
SELECT TIME(STR_TO_DATE(DATE_FORMAT(NOW(6), @time1), '%Y-%m-%d %Ih : %im : %ss %p'))
但是由于最終輸出的是STR_TO_DATE()包含日期,那么該TIME()函式就只需要提取時間值了。
演示小提琴。
可能是因為函式被“命名”為STR_TO_DATE,所以只轉換時間值是沒有意義的。這有點可以理解,但也很奇怪,因為在 MySQL 8.0 上,它的行為不像那樣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/394782.html
上一篇:C Primer第5版中發現的std::move錯誤
下一篇:遞減日期月份轉換
