私は、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
----------------
| | |
----------------
を試してみて、私はこのことを理解していない...私はすでに日付を持っています。これがどのように解決するのか分かりません。 – rjbogz
また、 'GETDATE()'は、MySQLではなく、 'NOW()'を使用するMSSQLです。 – rjbogz