如何将“24-Jun-2013”​​格式的日期转换为MySQL?

时间:2014-02-13 22:12:09

标签: mysql date

我正在尝试转换一个大表格,其中包含日期格式的日期 - 月份缩写 - 连续年份用短划线分隔,例如01-Jan-2014。我找到的最接近的问题是this one,其中提问者最终做了搜索和替换方法。我也可以这样做,但我认为肯定有更好的方法。我的代码:

SELECT STR_TO_DATE(datecolumn, '%c/%d/%Y') FROM 'Table'

返回null,其中包含上述格式的日期,但其他日期格式则可以。我还尝试了DATE_FUNCTION以及我在网上看到的其他建议。

1 个答案:

答案 0 :(得分:0)

这样做:

SELECT 
    DATE_FORMAT(
      STR_TO_DATE(
        REPLACE(
          SUBSTRING_INDEX(datecolumn,'-',-2),
          '-',
          CONCAT(' ', SUBSTRING_INDEX(datecolumn, '-', 1), ', ')
        ),
        '%M %d, %Y'
      ),
      '%Y-%m-%d'
    )

FROM `Table`;

说明:

  • 我们使用SUBSTRING_INDEX(datecolumn,'-',-2)来获取最后两个部分,例如Jan-2014
  • 我们将-中的Jan-2014替换为第一部分(使用SUBSTRING_INDEX),即01,但也使用CONCAT添加空格和,,我们得到Jan 01, 2014
  • 我们使用STR_TO_DATE并告诉它格式为%M %d, %Y
  • 然后,我们将%Y-%m-%d格式与DATE_FORMAT()
  • 放在一起

示例:

07-Jan-2014  ->  2014-01-07
9-May-2001   ->  2001-05-09
13-Dec-1978  ->  1978-12-13

Here's a fiddle