我有一个名为ReleaseDate的列(它是一个字符串)。其中大多数都是%e %M %Y
(1979年5月25日)的形式,但有一些地方只有%M %Y
(1979年5月)或%Y
(1979年)。不幸的是,STR_TO_DATE
似乎不适用于%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
,但这也无效。根据{{3}},我无法使用以下示例:
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
----------------
| | |
----------------
答案 0 :(得分:-1)
尝试CONVERT(DATE, GETDATE()) OR CONVERT(VARCHAR, GETDATE(), 22)