sql >> Database >  >> RDS >> Oracle

Oracle SQL-uren Verschil tussen datums in UU:MM:SS

Ervan uitgaande dat de kolommen al datums zijn, en daarom de conversie van en naar strings die je doet zinloos is, en dat het verschil altijd minder dan een dag zal zijn, zou je het volgende kunnen doen:

to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')

Dit krijgt het verschil tussen de datums als een fractie van een dag; zorgt ervoor dat het positief is via abs(); en voegt die breuk dan weer toe aan een nominale datum, die zijn tijd heeft als middernacht. Vervolgens converteert het dat naar een tekenreeks, waarbij alleen naar de tijd wordt gekeken.

Snelle demo:

-- CTEs to supply the two date/times
with stp (created_date) as (
  select cast(timestamp '2018-02-26 12:59:21' as date) from dual
),
adhh (created_date) as (
  select cast(timestamp '2018-02-26 12:59:32' as date) from dual
)
select to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
from stp cross join adhh;

TO_CHAR(
--------
00:00:11

Als het verschil groter kan zijn dan een dag, maar niet een jaar, kunt u het formaatmodel wijzigen in iets als 'FMDDD FMHH24:MI:SS' , die aan het begin volledige dagen zal tonen.



  1. room error:de kolommen die door de query worden geretourneerd, hebben niet de velden fieldname

  2. Impact van EM SQL-monitor

  3. Dubbele records vinden in PostgreSQL

  4. Hoe kan (of kan ik) DISTINCT SELECTEREN op meerdere kolommen?