在我的表中,我在表格列中有多种类型的日期格式,例如
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 :(得分:4)
您可以使用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中没有检测日期格式,因此您必须查看列中的值以获取所有可能的日期格式。
答案 1 :(得分: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
是表名。你可以用你的原件替换并尝试它
注意:我已将1添加到其他条件中,但如果您需要,可以使用更多