按小时,分钟,秒;统计之 round和trunc区别
时间分割统计:
Trunc 时间段
To_char 时间段
Round 时间段
下面举例按小时统计:
以下2种方式的统计结果是一样的。
Select trunc(time,’HH’) ,count(*) M from table where group by trunc(time,’HH’) order by M;
Select to_char(time,’YYYYMMDD HH24’),count(*) M from table where to_char(time,’YYYYMMDD HH24’) order by M;
round方式统计的结果和上面的结果不一样:
Select round(time,’HH’),count(*) M from table where group by round(time,’HH’) order by M;
疑问?同样是截取时间统计为什么结果不同呢?
这里我们是分组统计的,结果不一样,有可能我们分的组不一样。我们截取的是时间段,分组不一样也就是表示可能我们截取的时间段有差异。
思路:分组结果——》截取时间段——》round和 trunc 差别。
通过分析我们找到了问题的根源:
Round 与 trunc
Round 会把截取的时间段,四舍五入。
Trunc 会直接截取掉时间段,保持时间段原始性。这个才是我们想要的。所以我们采用TRUNC是正确的。
总结:我们按时间统计结果用 TRUNC和ROUND函数,除了不能按秒来统计外,其余时间都可以。如果你想用秒统计,可以直接采取TO_CHAR 就可以了 to_char(time,’yyyymmdd hh24:mi:ss’)。
下面是sunhj000java总结的一段有关 ROUND 和 TRUNC函数的区别。 感谢他
http://sunhj.iteye.com/blog/307662