繁体   English   中英

从表列中计算并选择不同的日期格式类型

[英]Count and select distinct date format type from table column

在我的表中,我在表列中有多种类型的日期格式,例如

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 因此,使用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中没有检测日期格式,因此您必须查看列上的值以获取所有可能的日期格式。

你可以这样做:

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添加到其他条件中,但如果您愿意,可以使用更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM