CASE计数值不是日期时

时间:2014-10-23 14:10:16

标签: mysql sql case

我有一个SELECT查询,其中一个字段如下所示:

SomeField
1775889
2014-10-01
1775889
1234567
2569874
5552789
2013-09-06

我需要计算非日期值的不同数量。像

这样的东西
SELECT
    COUNT(DISTINCT CASE WHEN SomeField != Date THEN SomeField END),

在这个例子中,当聚合SomeField时,由于有4个不同的非日期值,我返回了数字4。我该怎么做?

2 个答案:

答案 0 :(得分:1)

将列传递给具有预期格式的STR_TO_DATE(),invalids将为NULL

SELECT
    COUNT(DISTINCT SomeField)
FROM 
    T
WHERE
    STR_TO_DATE(SomeField, '%Y-%m-%d') IS NULL

答案 1 :(得分:0)

试试这个:

SELECT COUNT(*)
 FROM TABLE T
WHERE STR_TO_DATE(SomeField , '%Y-%m-%d')='0000-00-00'
GROUP BY SomeField

根据documentation

未指定的日期或时间部分的值为0,因此str中未完全指定的值会产生一些或所有部分设置为0的结果