2

我有一个名为 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
----------------
|      |       |
----------------
4

1 回答 1

-1

尝试CONVERT(DATE, GETDATE()) OR CONVERT(VARCHAR, GETDATE(), 22)

于 2016-10-21T16:21:50.150 回答