Oracle SQL Next_day未被分组

时间:2014-02-18 21:47:22

标签: sql oracle

select
  next_day(zebra_time, 'mon'),
from builds
where
    zebra_time >= '01-jan-2014'
group by next_day(zebra_time, 'mon');

zebra_time的数据类型为DATE

结果:
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06-JAN-14
06年1月6日

为什么他们不被分组?
难道只有一个06-JAN-14?

2 个答案:

答案 0 :(得分:7)

DATE类型包含时间,即使它没有显示。

select
  trunc(next_day(zebra_time, 'mon'))
from builds
where
    zebra_time >= '01-jan-2014'
group by trunc(next_day(zebra_time, 'mon'));

您可以使用trunc删除日期的时间部分,并使分组按预期运行。

答案 1 :(得分:2)

由于zebra_time的数据类型为DATE,因此它实际上包含日期和时间部分。由于您的NLS设置,时间部分不会显示。因此,如果每个zebra_time的时间部分不同,即使按zebra_time分组,也会得到多行。

尝试:

select
  to_char(next_day(zebra_time, 'mon'), 'MM/DD/YYYY HH12:MI:SS AM'),
from builds
where
    zebra_time >= '01-jan-2014'
group by to_char(next_day(zebra_time, 'mon'), 'MM/DD/YYYY HH12:MI:SS AM');

select
  trunc(next_day(zebra_time, 'mon')),
from builds
where
    zebra_time >= '01-jan-2014'
group by trunc(next_day(zebra_time, 'mon'));

TRUNC仅删除时间部分和组。

参考文献: Another SO related question