在我的表格中,我在表格列中有多種類型的日期格式,例如:從表列中計數並選擇不同的日期格式類型
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
在我的表格中,我在表格列中有多種類型的日期格式,例如:從表列中計數並選擇不同的日期格式類型
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
您可以使用STR_TO_DATE
來解決這個問題。 STR_TO_DATE
給出NULL
如果該值無法以指定的格式讀取。因此,與SUM
和CASE 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
你可以像STR_TO_DATE
在上面的例子中增加更多的這樣的規則。你可以找到在MySQL中的所有格式說明這裏的概述:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format
注:沒有檢測在MySQL的日期格式,所以你必須檢查你的列中的值來獲得所有可能的日期格式。
你的答案是針對具體情況。我的表太長了。如果我不知道表格中的日期格式是什麼。在那種情況下,我會做什麼? – Paramjeet
你可以這樣做如下:
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
是表名。你可以用你原來的更換和嘗試
注:我已經把1中的其他條件,但你可以使用更多,如果你想
你的答案是針對具體情況。我的表太長了。如果我不知道表格中的日期格式是什麼。在那種情況下,我會做什麼? – Paramjeet
首先你必須找到所有的日期格式。你可以找到使用此: '從表組中選擇datefield'通過datefield' 此查詢會爲您提供所有獨特的日期格式日期。這將有助於查看錶格中有多少日期可用的對象 –
要澄清,任何和所有上述格式可以發生在一個單一的領域? – toonice
@toonice這是一張舊錶格,沒有任何特定的日期格式,這就是爲什麼它有多種日期格式 – Paramjeet
我可以知道這個字段的數據類型嗎? –