2017-05-03 43 views
4

在我的表格中,我在表格列中有多種類型的日期格式,例如:從表列中計數並選擇不同的日期格式類型

20 May 1984 
20.03.2004 
20/June/2005 
20 August 1925 

那麼如何讓它們在我的表中使用不同的日期格式。

輸出應該是這樣的: -

column | count 
-------|------------ 
d M y | 15 
d.m.y | 25 
d/M/y | 12 
d F y | 10 
+0

要澄清,任何和所有上述格式可以發生在一個單一的領域? – toonice

+0

@toonice這是一張舊錶格,沒有任何特定的日期格式,這就是爲什麼它有多種日期格式 – Paramjeet

+0

我可以知道這個字段的數據類型嗎? –

回答

4

您可以使用STR_TO_DATE來解決這個問題。 STR_TO_DATE給出NULL如果該值無法以指定的格式讀取。因此,與SUMCASE WHEN你可以指望用指定格式的發現日期:

SELECT 
    SUM(CASE WHEN NOT STR_TO_DATE(colVal, '%d %M %Y') IS NULL THEN 1 ELSE 0 END) AS 'd M y', 
    SUM(CASE WHEN NOT STR_TO_DATE(colVal, '%d.%m.%Y') IS NULL THEN 1 ELSE 0 END) AS 'd.m.y', 
    SUM(CASE WHEN NOT STR_TO_DATE(colVal, '%d/%M/%Y') IS NULL THEN 1 ELSE 0 END) AS 'd/M/y' 
FROM table_name 

演示:http://sqlfiddle.com/#!9/bc0e9/2/0

你可以像STR_TO_DATE在上面的例子中增加更多的這樣的規則。你可以找到在MySQL中的所有格式說明這裏的概述:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format

注:沒有檢測在MySQL的日期格式,所以你必須檢查你的列中的值來獲得所有可能的日期格式。

+0

你的答案是針對具體情況。我的表太長了。如果我不知道表格中的日期格式是什麼。在那種情況下,我會做什麼? – Paramjeet

0

你可以這樣做如下:

SELECT 

    IF(cdate REGEXP (' ') , 'd M Y' , 
     IF(cdate REGEXP ('.') , 'd.m.Y' , 
      IF(cdate REGEXP ('/') , 'd/M/Y' ,'1') 
     ) 
    ) AS format_type , count(id) as total 


FROM datawithdate GROUP BY format_type 

這裏cdate是你的列名,datawithdate是表名。你可以用你原來的更換和嘗試

演示:http://sqlfiddle.com/#!9/50809/1

注:我已經把1中的其他條件,但你可以使用更多,如果你想

+0

你的答案是針對具體情況。我的表太長了。如果我不知道表格中的日期格式是什麼。在那種情況下,我會做什麼? – Paramjeet

+0

首先你必須找到所有的日期格式。你可以找到使用此: '從表組中選擇datefield'通過datefield' 此查詢會爲您提供所有獨特的日期格式日期。這將有助於查看錶格中有多少日期可用的對象 –

相關問題