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

Jak znaleźć różnice w formacie B/W TIMESTAMP w Oracle?

Wynikiem arytmetyki znacznika czasu jest typ danych INTERVAL. Masz tam DZIEŃ PRZERWY DO DRUGIM...

Jeśli chcesz liczbę minut, jednym sposobem byłoby użycie EXTRACT() , na przykład:

select extract( minute from interval_difference ) * 60 
        + extract( hour from interval_difference ) * 60
        + extract( day from interval_difference ) * 60 * 24
  from ( select systimestamp - (systimestamp - 1) as interval_difference
           from dual )

Alternatywnie możesz użyć triku z datami:

select sysdate + (interval_difference * 1440) - sysdate
  from (select systimestamp - (systimestamp - 1) as interval_difference
          from dual )

Wersja „sztuczki” działa ze względu na kolejność operatorów i różnice między arytmetyką daty i znacznika czasu.

Początkowo operacja wygląda tak:

date + ( interval * number ) - date

Jak wspomniano w dokumentacji:

Oracle ocenia wyrażenia w nawiasach przed oceną tych na zewnątrz.

Tak więc pierwsza operacja wykonała to, aby pomnożyć interwał przez 1440. Przedział, czyli dyskretny okres czasu pomnożony przez liczbę to kolejny dyskretny okres czasu, patrz dokumentacja dotycząca daty i czasu oraz arytmetyki przedziałów. Tak więc wynikiem tej operacji jest interwał, pozostawiając nam:

date + interval - date

Operator plus ma tutaj pierwszeństwo przed minusem. Powodem tego może być to, że interwał minus data jest nieprawidłową operacją, ale dokumentacja również sugeruje, że tak jest (nie pojawia się i tego nie mówi). Tak więc pierwsza wykonywana operacja to data + interwał. Data plus interwał to data. Pozostawienie tylko

date - date

Zgodnie z dokumentacją daje to liczbę całkowitą reprezentującą liczbę dni. Jednak pomnożyłeś pierwotny interwał przez 1440, więc teraz oznacza to 1440 razy liczbę dni, które miałby w innym przypadku. Pozostaje Ci liczba sekund.

Warto zauważyć, że:

Gdy obliczenia interwałowe zwracają wartość daty i godziny, wynik musi być rzeczywistą wartością daty i godziny lub baza danych zwraca błąd. Na przykład, następne dwie instrukcje zwracają błędy:

Metoda „sztuczki” będzie zawodzi, rzadko, ale i tak zawiedzie. Jak zawsze najlepiej robić to właściwie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pobrać dane z dwóch kolumn w formacie A, B w Oracle?

  2. Oracle sql do zliczania wystąpień różnych wartości w jednej kolumnie

  3. Jaka jest różnica między słowem kluczowym join a słowem kluczowym join w Oracle sql?

  4. FLOOR() Funkcja w Oracle

  5. INSTR() Funkcja w Oracle