我有一个关于 sql 函数的问题:floor()

I have a question about sql function: 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使用floor执行结果是299,应该是300

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

不过解决方法很简单——去掉多余的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