Timediff 结果小数问题 oracle 11g

Timediff result decimal issue oracle 11g

我想得到如下号码。


例如

时间20200803 180000

Btike 20200803 183000

Select (to_date(atime, 'yyyymmddhh24miss') -to_date(btime, 'yyyymmddhh24miss'))*24

From dual

上面的结果是0.5,但是输出是0.499999。

如果我使用round oracle 函数我认为它会得到解决。 但是我很好奇这个。

我尝试使用 'timediff issue in oracle, timediff decimal issue in oracle' 等关键字搜索此原因,但找不到原因..

为什么会出现这样的结果? 或者你能告诉我搜索原因的关键词吗?

感谢您阅读我的问题。

你得到的是算术差,也就是那个差在数字格式上的小数表示,与时差(分时差)无关。

举个例子

SQL> select to_date('20200803183000','yyyymmddhh24miss') - to_date('20200803173000','yyyymmddhh24miss') from dual ;

TO_DATE('20200803183000','YYYYMMDDHH24MISS')-TO_DATE('20200803173000','YYYYMMDDH
--------------------------------------------------------------------------------
                                                                      .041666667

上面的查询是计算两个日期之间的时差,但输出的是数字格式的十进制表示,我可以将其转换为分钟

SQL> select ( to_date('20200803183000','yyyymmddhh24miss') - to_date('20200803173000','yyyymmddhh24miss') ) * 24 * 60 from dual ;

(TO_DATE('20200803183000','YYYYMMDDHH24MISS')-TO_DATE('20200803173000','YYYYMMDD
--------------------------------------------------------------------------------
                                                                              60

SQL>

如果你想在几小时内

SQL>  select ( to_date('20200803183000','yyyymmddhh24miss') - to_date('20200803180000','yyyymmddhh24miss') ) * 24 from dual ;

(TO_DATE('20200803183000','YYYYMMDDHH24MISS')-TO_DATE('20200803180000','YYYYMMDD
--------------------------------------------------------------------------------
                                                                              .5

更新

@AlexPoole 是对的。这与您的 set numwith 设置有关

SQL> set numwidth 42
SQL>  select ( to_date('20200803183000','yyyymmddhh24miss') - to_date('20200803180000','yyyymmddhh24miss') ) * 24 from dual ;

(TO_DATE('20200803183000','YYYYMMDDHH24MISS')-TO_DATE('20200803180000','YYYYMMDDHH24MISS'))*24
----------------------------------------------------------------------------------------------
                                                     .4999999999999999999999999999999999999992

SQL> set numwidth 39
SQL>  select ( to_date('20200803183000','yyyymmddhh24miss') - to_date('20200803180000','yyyymmddhh24miss') ) * 24 from dual ;

(TO_DATE('20200803183000','YYYYMMDDHH24MISS')-TO_DATE('20200803180000','YYYYMMDDHH24MISS'))*24
----------------------------------------------------------------------------------------------
                                                                                            .5

NUMWIDTH 设置控制显示数值时使用的默认宽度。我的 Sqlplus 使用默认的 39,这就是为什么我看到 0.5