2016-10-21 154 views
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 
---------------- 
|  |  | 
---------------- 

回答

-1

嘗試CONVERT(DATE, GETDATE()) OR CONVERT(VARCHAR, GETDATE(), 22)

+0

我不明白這個...我有日期了。我不明白這將如何解決任何問題。 – rjbogz

+0

此外,'GETDATE()'是我認爲的MSSQL,而不是MySQL,它使用NOW()代替。 – rjbogz