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

时间:2017-05-03 05:45:13

标签: mysql sql

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

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

2 个答案:

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

答案 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是表名。你可以用你的原件替换并尝试它

  

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

注意:我已将1添加到其他条件中,但如果您需要,可以使用更多