Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle SQL findet Zeitunterschied (beide Zeit in Zeichenfolge)

Sie haben ein fehlerhaftes Design .

  • Sie sollten niemals eine datetime speichern Wert als String .
  • DATUM hat immer sowohl Datums- als auch Zeitelemente, sodass das Zeitelement nicht separat gespeichert werden muss.

Wie auch immer, als Problemumgehung müssen Sie zuerst die Zeichenfolge in ein Datum umwandeln und dann die Dauer in Sekunden finden , fügen Sie die Sekunden zu TRUNC(SYSDATE) hinzu , dann ist der Rest eine einfache Datumsformatierung .

Zum Beispiel

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>