我有一个名为 ReleaseDate 的列(它是一个字符串)。它们中的大多数是%e %M %Y
(25 May 1979) 的形式,但也有一些只是%M %Y
(May 1979) 或%Y
(1979)。不幸的是,它似乎不适STR_TO_DATE
用于 just %M %Y
。这是我尝试过的:
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} |
-------------------------------------------------
有什么解决方法吗?
编辑
除此之外,我试图sql_mode
通过取出STRICT_TRANS_TABLES
甚至添加来进行更改ALLOW_INVALID_DATES
,但这也没有奏效。根据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
----------------
| | |
----------------