2016-01-04 6 views
1

В моем db у меня есть 2 столбца START_TIME, END_TIME, как в VARCHAR2 (8), мне нужно найти продолжительность с помощью END_TIME-START_TIME.oracle sql найти разницу во времени (оба раза в строке)

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; 

ответ

2

У вас есть недостатки дизайна.

  • Вы никогда не должны хранить значения в DATETIME в строке.
  • 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> 

 Смежные вопросы

  • Нет связанных вопросов^_^