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?
答案 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仅删除时间部分和组。