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
我想得到如下号码。
例如
时间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