oracle sql查找时间差(两次都是字符串)

时间:2016-01-04 08:05:35

标签: sql oracle time datetime-format date-arithmetic

在我的数据库中我有两列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;

1 个答案:

答案 0 :(得分:2)

你有有缺陷的设计

  • 您绝不应将日期时间值存储为字符串
  • 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>