【问题标题】:MySQL STR_TO_DATE for strings with just month and year or just yearMySQL STR_TO_DATE 用于只有月份和年份或年份的字符串
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 我不明白这个...我已经有约会了。我不明白这将如何解决任何问题。
    • 另外,我认为GETDATE() 是MSSQL,而不是MySQL,它使用NOW()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2014-08-07
    相关资源
    最近更新 更多