是因为
SQL> select (to_date('2003-06-02 00:05:00', 'yyyy-mm-dd hh24:mi:ss') - trunc(sysdate, 'dd'))
2 from dual
3 /(TO_DATE('2003-06-0200:05:00'
-----------------------------
.003472222
(to_date('2003-06-02 00:05:00', 'yyyy-mm-dd hh24:mi:ss') - trunc(sysdate, 'dd')) 的值是0.003472222,trunc后等于0,0*288=0。
SQL> select (to_date('2003-06-02 00:05:00', 'yyyy-mm-dd hh24:mi:ss') - trunc(sysdate, 'dd'))
2 from dual
3 /(TO_DATE('2003-06-0200:05:00'
-----------------------------
.003472222
(to_date('2003-06-02 00:05:00', 'yyyy-mm-dd hh24:mi:ss') - trunc(sysdate, 'dd')) 的值是0.003472222,trunc后等于0,0*288=0。
SQL> select .003472222*288 from dual;.003472222*288
--------------
.999999936trunc函数的意思是取整数部分,而不会四舍五入,所以
SQL> select trunc(.003472222*288) from dual;TRUNC(.003472222*288)
---------------------
0
我有一张表,有一个fdt的字段
我要统计每5分钟的情况:[00:00:00,00:00:05)为第一个间隔,[5,10)为第二个间隔
表有好几十万条记录,但是又不能建索引
我想用一个select语句搞定,
所以只能出次下策
group by trunc((fdt-:day)*1440/5)+1
:day为某天的开始时间但是存在上诉问题,不知道有没有别的高招
SQL> select trunc(0.99) from dual;TRUNC(0.99)
-----------
0SQL> select 0.99 from dual; 0.99
----------
.99
round(value,[scale])
floor(value)
cell(value)
不知道你是不是想四舍五入,也就是你希望trunc(...)之后的结果为1,而不是零是吗?
可以
group by trunc((fdt-:day)*1440/5 + 0.5)+1
或者
group by ceil((fdt-:day)*1440/5)+1
记得斑竹以前贴用过,该网站现打不开,再贴一次吧。