2014-02-13 54 views
1

我正試圖轉換一個大表格,其日期格式爲日月 - 月份縮寫 - 年份之間用破折號分隔,如01-Jan-2014。我發現的最接近的問題是this one,提交者最終做了搜索和替換方法。我也可以這樣做,但我認爲這肯定有更好的辦法。我的代碼:如何將「24-Jun-2013」​​格式的日期轉換爲MySQL?

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

返回NULL與上述格式的日期,但罰款與其他日期格式。我也嘗試了DATE_FUNCTION以及我在網上看到的其他建議。

+3

嘗試'STR_TO_DATE( '01 -Jan-2014','%d-%M-%Y')' – krokodilko

回答

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來增加空格和,,所以我們ge牛逼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

+0

輝煌。完美工作。謝謝! – user3051132

+0

很高興幫助!請記住接受答案! :) –

相關問題