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

zebra_time的數據類型爲DATE的Oracle SQL NEXT_DAY沒有進行分組

結果:
06 - 14
06 - 14
06 - 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?

回答

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刪除日期的時間部分,並得到分組的行爲預期。

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