在Oracle

时间:2015-12-11 13:58:40

标签: oracle date null

我在Oracle中有一个带有空日期的问题

我有这样一张桌子:

ID   DATE
1     '02/08/2015'
1     NULL
1    '02/06/2014'
2    NULL
2    '06/02/2013'

这只是真实表格的一个例子。现在我需要的是这样的事情:

ID   DAY_INAC
1    1
2    1

我的意思是,我只需要计算DATE列中的空值。

但是当我执行我的查询时

Select id, count(date)
from table
where date is null
group by Id
having count(date)>0

结果我什么也没得到。我需要使用日期值来生成相应的计数。

此致

4 个答案:

答案 0 :(得分:4)

由于您的查询已经按date is null进行过滤,因此您只需使用count(*)

Select id, count(*)
from table
where date is null
group by Id
having count(*) > 0

答案 1 :(得分:2)

COUNT不会计算NULL个值。您可以使用CASE进行更改:

Select id, count(CASE WHEN date IS NULL THEN 1 END) AS DAY_INAC
from table
where date is null
group by Id;

LiveDemo

请不要将列命名为数据类型。否则你可能需要引用它们。

答案 2 :(得分:1)

更精简的查询:

Select id, count(nvl2(date_column,null, sysdate)) as cnt
from table
group by Id;

答案 3 :(得分:1)

COUNT不会计算NULL个值 - 而是让它计算1行的字面值(即NULL):

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE table_name ( ID, "DATE" ) AS
          SELECT 1, DATE '2015-08-02' FROM DUAL
UNION ALL SELECT 1, NULL FROM DUAL
UNION ALL SELECT 1, DATE '2014-06-02' FROM DUAL
UNION ALL SELECT 2, NULL FROM DUAL
UNION ALL SELECT 2, DATE '2013-02-06' FROM DUAL

查询1

SELECT  id,
        COUNT(1)
FROM    table_name
WHERE   "DATE" IS NULL
GROUP BY id

<强> Results

| ID | COUNT(1) |
|----|----------|
|  1 |        1 |
|  2 |        1 |