【发布时间】:2017-03-04 00:55:36
【问题描述】:
我有一个名为 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} |
-------------------------------------------------
有什么解决方法吗?
编辑
为了补充这一点,我试图通过取出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
----------------
| | |
----------------
【问题讨论】:
标签: mysql string date type-conversion str-to-date