sql >> Databasteknik >  >> RDS >> Oracle

Oracle SQL-timmar Skillnad mellan datum i TT:MM:SS

Om du antar att kolumnerna redan är datum, och därför omvandlingen till och från strängar du gör är meningslös, och att skillnaden alltid kommer att vara mindre än en dag, kan du göra:

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

Detta får skillnaden mellan datumen som en bråkdel av en dag; ser till att den är positiv via abs(); och lägger sedan till den bråkdelen tillbaka till ett nominellt datum, som har sin tid som midnatt. Sedan konverterar den det till en sträng och tittar bara på tiden.

Snabb 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

Om skillnaden kan överstiga en dag, men inte ett år, kan du ändra formatmodellen till något i stil med 'FMDDD FMHH24:MI:SS' , som kommer att visa hela dagar vid starten.



  1. PostgreSQL + Hibernate + Spring automatiskt skapa databas

  2. Bygga en mycket tillgänglig databas för Moodle med MySQL-replikering

  3. Min MySQL-databas är skadad... Vad gör jag nu?

  4. Escape en sträng i SQL Server så att den är säker att använda i LIKE-uttryck