sql >> Database teknologi >  >> RDS >> Oracle

Oracle SQL-timers forskel mellem datoer i TT:MM:SS

Hvis du antager, at kolonnerne allerede er datoer, og derfor konverteringen til og fra strenge, du laver, er meningsløs, og at forskellen altid vil være mindre end en dag, kunne du gøre:

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

Dette får forskellen mellem datoerne som en brøkdel af en dag; sørger for, at den er positiv via abs(); og tilføjer derefter den brøkdel tilbage til en nominel dato, som har sin tid som midnat. Så konverterer den det til en streng og ser kun på det tidspunkt.

Hurtig 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

Hvis forskellen kan overstige en dag, men ikke et år, kan du ændre formatmodellen til noget som 'FMDDD FMHH24:MI:SS' , som vil vise hele dage ved starten.



  1. Forespørg om sammenligning af datoer i SQL

  2. Hvordan indtaster man nylinjetegn i Oracle?

  3. Indsæt data og indstil fremmednøgler med Postgres

  4. Hvordan genereres tabel API-pakke i Oracle SQL Developer?