Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle SQL Godziny Różnica między datami w GG:MM:SS

Zakładając, że kolumny są już datami, a zatem konwersja do i z ciągów, które wykonujesz, jest bezcelowa, a różnica zawsze będzie mniejsza niż jeden dzień, możesz zrobić:

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

Daje to różnicę między datami jako ułamek dnia; upewnia się, że jest pozytywny poprzez abs(); a następnie dodaje ten ułamek z powrotem do daty nominalnej, która ma swój czas jako północ. Następnie konwertuje to na ciąg, patrząc tylko na czas.

Szybka prezentacja:

-- 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

Jeśli różnica może przekroczyć dzień, ale nie rok, możesz zmienić model formatu na mniej więcej 'FMDDD FMHH24:MI:SS' , który na początku pokaże pełne dni.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle 11g — Sprawdź ograniczenie za pomocą RegEx

  2. Brama PL/SQL w R11i

  3. Awarie z EMCLI

  4. Niejawna różnica konwersji CAST vs ssis przepływu danych

  5. Funkcja NVL2 w Oracle