sql >> Database >  >> RDS >> Oracle

Oracle:Bereken tijdsverschil in UU:MM:SS tussen 2 datums

Zijn de datums in het type varchar2? Vervolgens kunt u het eerst converteren naar het tijdstempelformaat. Aangezien het ook een tijdzone heeft, gebruik je de to_timestamp_tz functie.

SQL> select to_timestamp_tz('Sun Dec 29 11:55:29 EST 2013','Dy Mon dd hh24:mi:ss TZR yyyy') from dual;

TO_TIMESTAMP_TZ('SUNDEC2911:55:29EST2013','DYMONDDHH24:MI:SSTZRYYYY')
---------------------------------------------------------------------------
29-DEC-13 11.55.29.000000000 AM EST

Zodra de datums van het type tijdstempel zijn, krijgt u door ze af te trekken het verschil in intervaldag tot tweede type.

SQL> select   to_timestamp_tz ('Mon Dec 30 20:21:34 EST 2013','Dy Mon dd hh24:mi:ss TZR yyyy')
  2         - to_timestamp_tz ('Sun Dec 29 11:55:29 EST 2013','Dy Mon dd hh24:mi:ss TZR yyyy') from dual;

TO_TIMESTAMP_TZ('MONDEC3020:21:34EST2013','DYMONDDHH24:MI:SSTZRYYYY')-TO_TI
---------------------------------------------------------------------------
+000000001 08:26:05.000000000

Gebruik vervolgens extract om de afzonderlijke componenten uit het interval te halen.

SQL> select extract(day from intrvl) as dd,
  2         extract(hour from intrvl) as hh24,
  3         extract(minute from intrvl) as mi,
  4         extract(second from intrvl) as ss
  5  from (
  6        select   to_timestamp_tz ('Mon Dec 30 20:21:34 EST 2013','Dy Mon dd hh24:mi:ss TZR yyyy')
  7               - to_timestamp_tz ('Sun Dec 29 11:55:29 EST 2013','Dy Mon dd hh24:mi:ss TZR yyyy') as intrvl
  8       from dual
  9       );

        DD       HH24         MI         SS
---------- ---------- ---------- ----------
         1          8         26          5


  1. De stap Unpivot gebruiken om een ​​tabel in tabelvorm te maken van een kruistabel

  2. Meet databaseprestaties onder druk

  3. Gegevens exporteren naar een plat bestand met BCP Utility en gegevens importeren met Bulk Insert

  4. Detecteer dubbele items in recursieve CTE