0
我有一個名爲ReleaseDate(這是一個字符串)的列。它們中的大多數是%e %M %Y
(1979年5月25日)的形式,但是其中有一些只是%M %Y
(1979年5月)或%Y
(1979)。不幸的是,它似乎並沒有STR_TO_DATE
只與%M %Y
。這是我曾嘗試:MySQL STR_TO_DATE字符串只有月份和年份或只有一年
SELECT ReleaseDate,
CASE
WHEN STR_TO_DATE(ReleaseDate, '%e %M %Y') IS NULL
THEN CASE
WHEN STR_TO_DATE(ReleaseDate, '%M %Y') IS NULL
THEN STR_TO_DATE(ReleaseDate, 'Y')
ELSE STR_TO_DATE(ReleaseDate, '%M %Y')
END
ELSE STR_TO_DATE(ReleaseDate, '%e %M %Y')
END,
STR_TO_DATE(ReleaseDate, '%M %Y')
FROM MyTable
但它返回下列信息:
RealeaseDate CASE STR_TO_DATE
-------------------------------------------------
| 20 May 2003 | 5/20/2003 12:00:00 AM | {null} |
| 16 May 2000 | 5/16/2000 12:00:00 AM | {null} |
| May 1976 | {null} | {null} |
-------------------------------------------------
有沒有辦法解決這個?
編輯
要添加到這一點,我試圖通過取出STRICT_TRANS_TABLES
甚至ALLOW_INVALID_DATES
將改變sql_mode
,但是這也沒有工作。據https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date,我是不是可以使用下面的示例之一:
SELECT STR_TO_DATE('9','%m');
也返回{null}
。
我也嘗試將設置爲sql_mode
爲空。通過運行:
SELECT version();
SELECT @@GLOBAL.sql_mode global, @@SESSION.sql_mode session
我得到:
version() *
-------------
| 5.6.14 |
-------------
global session
----------------
| | |
----------------
我不明白這個...我有日期了。我不明白這將如何解決任何問題。 – rjbogz
此外,'GETDATE()'是我認爲的MSSQL,而不是MySQL,它使用NOW()代替。 – rjbogz