在 Oracle 中,如何获取以 12 小时格式存储日期的 2 个日期之间的时差(以小时为单位)?

How to get the time difference in hours between 2 dates where dates are stored in 12 hour format in Oracle?

我有两个日期:日期 1:20-Mar-2020 07:35:00 PM 和日期 2:20-Mar-2020 02:42:00 PM

我已经写了查询:

SELECT     ROUND(minutes / 60, 2) || ' Hours ' 
FROM     ( SELECT  (Date1 - to_date(Date2, 'DD-MON-YYYY HH12:MI:SS')) * 24 * 60     AS minutes
  FROM     dual
);

但是我没有得到想要的结果,它显示 19.58 小时是错误的,请指正我哪里错了?

正如 Mat 所说,您需要将两个字符串都转换为日期,然后将它们相减:

to_date(date1, 'dd-mon-yyyy hh12:mi:ss am') - to_date(date2, 'dd-mon-yyyy hh12:mi:ss am')

请注意,您的格式说明符缺少 am 部分。

这会为您提供十进制天数形式的结果,然后您可以通过将其乘以 24 来转换小时数:

round(
    ( 
        to_date(date1, 'dd-mon-yyyy hh12:mi:ss am') 
        - to_date(date2, 'dd-mon-yyyy hh12:mi:ss am')
    ) * 24, 
    2
) || ' hours'

Demo on DB Fiddle:

select round(
    (
        to_date('20-Mar-2020 07:35:00 PM', 'dd-mon-yyyy hh12:mi:ss am') 
        - to_date('20-Mar-2020 02:42:00 PM', 'dd-mon-yyyy hh12:mi:ss am')
    ) * 24, 
    2
) || ' hours' res
from dual
| RES        |
| :--------- |
| 4.88 hours |