我有一个关于 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
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