2016-10-21 5 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} | 
------------------------------------------------- 

は、このために任意の回避策はありますか?これに追加するには

EDIT

、私はSTRICT_TRANS_TABLESを取り出しても、ALLOW_INVALID_DATESに追加することでsql_modeを変更しようとしているが、これもうまくいきませんでした。また{null}を返し

SELECT STR_TO_DATE('9','%m'); 

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-dateによると、私はどちらか、次の例を使用することができませんでした。

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()'は、MySQLではなく、 'NOW()'を使用するMSSQLです。 – rjbogz

関連する問題