oracle sql 求时间差(均为字符串时间)

oracle sql find time difference (both time in string)

在我的数据库中,我有 2 列 START_TIME、END_TIME,都在 VARCHAR2(8) 中,我需要使用 END_TIME- START_TIME 找到持续时间.

START_TIME | END_TIME | DURATION

 21:30:03    21:34:11   00:04:08

我想做类似下面的事情,我该怎么做?

SELECT TO_DATE(END_TIME, 'HH24:MI:SS') AS END, 
       TO_DATE(START_TIME, 'HH24:MI:SS') AS START, 
       (END-START) AS duration FROM Table1;

您的设计有缺陷

  • 您永远不应将 datetime 值存储为 string.
  • DATE总是有日期和时间元素,所以不需要单独存储时间元素。

无论如何,作为解决方法,您需要先将字符串转换为日期,然后找到以 为单位的持续时间,将秒数添加到 TRUNC(SYSDATE),然后剩下的很简单日期格式

例如,

SQL> WITH sample_data AS(
  2  SELECT '21:30:03' START_TIME, '21:34:11' END_TIME FROM dual
  3  )
  4  SELECT start_time,
  5    end_time,
  6    TO_CHAR (TRUNC (SYSDATE) + (to_date(end_time, 'HH24:MI:SS') -
  7                                to_date(start_time, 'HH24:MI:SS')
  8                               ) , 'hh24:mi:ss' ) duration
  9  FROM sample_data;

START_TI END_TIME DURATION
-------- -------- --------
21:30:03 21:34:11 00:04:08

SQL>