首页 > 解决方案 > Oracle - 日期 - 日期问题

问题描述

我正在尝试计算日期之间的差异。我只需要一天的小数点,所以日期 - 日期就是我所需要的。

我遇到的问题是,这适用于某些记录,但不适用于其他记录,没有真正的模式。使用以下:

select (case when c.call_answered_date is null then c.call_ended_date - c.call_entered_queue_date else 0 end),
C.CALL_ENTERED_SYSTEM_DATE, C.CALL_ENTERED_QUEUE_DATE, C.CALL_ENDED_DATE

我明白了

abd_wait              call_entered_system_date        call_entered_queue_date     call_ended_date
--------              ------------------------        -----------------------     ---------------
5.78703703703704E-5   06/01/2020 12:30:00             06/01/2020 12:30:11         06/01/2020 12:30:16
0.000844907407407407  06/01/2020 12:35:38             06/01/2020 12:35:49         06/01/2020 12:37:02

所以第二行按预期工作,第一行没有。但我不知道为什么。

我需要它们都像第二行一样是一天的小数。

请帮忙。

标签: oracle

解决方案


第一行具有正确的值,并且只是科学记数法:5.78703703703704E-5 与: 5 秒相同,0.0000578703703703704表示为一天的一小部分:(16-11)/24/60/60。该值仍然是一个(十进制)数字,只是以稍微不同的格式显示。

如果您希望它作为固定格式的十进制字符串,则使用TO_CHAR为数字提供明确的格式:

select case
       when c.call_answered_date is null
       then TO_CHAR(
              c.call_ended_date - c.call_entered_queue_date,
              '0.000000000000000000'
            )
       else '0'
       end,
       C.CALL_ENTERED_SYSTEM_DATE,
       C.CALL_ENTERED_QUEUE_DATE,
       C.CALL_ENDED_DATE
FROM   your_table c

推荐阅读