2016-08-24 40 views
3

我在MySql的表中有一列,其中包含任何格式的字符串日期(沒有固定模式),它可以是m-d-yM-D-Ym/d/y或YY/MM/DD或MM/DD/YY或mm/dd/yy等。我的問題是如何檢測它,然後更改爲某些特定格式,即mm/dd/yy。如何從日期以不同格式存儲的varchar列獲取有效日期

+0

ü可以嘗試此查詢describe表;然後ALTER TABLE – Oncodeeater

+0

'01/12/13' - 2001年12月13日或2013年12月12日? – Mike

+0

有多少種不同的格式?你可以猜測或列出清單嗎? – 1000111

回答

2

如果您可以猜測您在varchar字段中存儲日期的不同格式的數量,那麼處理該問題會更容易;

一種方式是把查詢中的所有這些不同的格式如下:

SELECT 
COALESCE(
    STR_TO_DATE(your_date_column,'%m-%d-%Y'), 
    STR_TO_DATE(your_date_column,'%M-%D-%Y'), 
    STR_TO_DATE(your_date_column,'%m/%d/%Y'), 
    STR_TO_DATE(your_date_column,'%m-%d-%Y'), 
    .... 
    . 
    . 

) 
FROM your_table; 

示範:

SET @your_date_field := '8/8/2016'; 

SELECT 
COALESCE(
    STR_TO_DATE(@your_date_field,'%m-%d-%Y'), 
    STR_TO_DATE(@your_date_field,'%M-%D-%Y'), 
    STR_TO_DATE(@your_date_field,'%m/%d/%Y'), 
    STR_TO_DATE(@your_date_field,'%M/%D/%Y') 
); 

輸出:2016-08-08yyyy-mm-dd)

注:

但日期應該存儲在date數據類型中。違反這一規定將會導致這種麻煩的情況。

因此,最好將這些日期字符串移至日期數據類型列。


更多:爲了將這些日期字符串到date數據類型列,你可以按照下面的步驟:

ALTER TABLE your_table ADD COLUMN date_new date; 

UPDATE 
your_table 
SET date_new = COALESCE(
    STR_TO_DATE(your_date_column,'%m-%d-%Y'), 
    STR_TO_DATE(your_date_column,'%M-%D-%Y'), 
    STR_TO_DATE(your_date_column,'%m/%d/%Y'), 
    STR_TO_DATE(your_date_column,'%m-%d-%Y'), 
    .... 
    . 
    . 

); 


ALTER TABLE your_table DROP COLUMN `date`; 

ALTER TABLE datestable CHANGE COLUMN `date_new` `date` date; 
+0

非常感謝您的支持,您已經解決了使用'COALESCE'函數選擇正確日期的挑戰性問題,我知道'COALESCE'函數,但沒有想到了。實際上有人已經創建了列類型'varchar',並以不同的格式插入/更新日期,因此我正確的做了一個單獨的列,並將這些值以* mysql *日期格式存儲並放置這一列,正是你說的是我的計劃來執行它。非常感謝你的幫助。 –

+0

很高興這是一個幫助。:) – 1000111

相關問題