我对sql函数有疑问:floor()

时间:2019-06-24 07:15:30

标签: sql oracle floor

select floor(to_number(to_date('20180620130000','yyyy-mm-dd hh24:mi:ss')-to_date('20180620080000', 'yyyy-mm-dd hh24:mi:ss'))*24*60)  
from dual;

select  to_number(to_date('20180620130000','yyyy-mm-dd hh24:mi:ss')-to_date('20180620080000', 'yyyy-mm-dd hh24:mi:ss'))*24*60  
from dual;

为什么使用下限的SQL执行结果为299,应该为300

1 个答案:

答案 0 :(得分:2)

您遇到一些奇怪的精度问题。

但是解决方案很简单-删除多余的TO_NUMBER(两个DATE之差是一个数字),您将获得正确的结果

select 
floor((to_date('20180620130000','yyyy-mm-dd hh24:mi:ss')-to_date('20180620080000', 'yyyy-mm-dd hh24:mi:ss'))*24*60)  flr 
from dual;

       FLR
----------
       300