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

TIMESTAMPDIFF w Oracle 11g?

Ta funkcja nie istnieje w Oracle RDMBS; wyraźnie tak było w Oracle Lite (którego nigdy nie spotkałem) i wierzę, że jest w innych bazach danych, takich jak MySQL.

Istnieje dokumentacja obejmująca arytmetykę daty i godziny oraz przedziałów co zaprowadzi cię na część drogi; możesz odjąć jeden znacznik czasu od drugiego; lub jedna data z innej lub połączenie tych dwóch - ale łatwiej jest trzymać się jednego typu danych. W zależności od tego, którego używasz, otrzymasz interwał lub liczbę reprezentującą liczbę dni:

SQL> SELECT CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00' FROM DUAL;

CURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00'
---------------------------------------------------------------------------
+000006169 16:16:21.287166000

SQL> SELECT CURRENT_DATE - DATE '1998-12-09' FROM DUAL;

CURRENT_DATE-DATE'1998-12-09'
-----------------------------
                   6169.67775

Jeśli chcesz tylko liczbę pełnych dni, możesz użyć extract() dla interwału, aby uzyskać tylko żądany element, lub trunc() dla liczby, aby usunąć część ułamkową:

SQL> SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP - TIMESTAMP '1998-12-09 00:00:00') FROM DUAL;

EXTRACT(DAYFROMCURRENT_TIMESTAMP-TIMESTAMP'1998-12-0900:00:00')
---------------------------------------------------------------
                                                           6169

SQL> SELECT TRUNC(CURRENT_DATE - DATE '1998-12-09') FROM DUAL;

TRUNC(CURRENT_DATE-DATE'1998-12-09')
------------------------------------
                                6169

Możesz także trunc() bieżąca data przed porównaniem, jeśli wolisz, więc porównujesz obie o północy, co oznacza, że ​​nie będzie ułamkowej części dnia do usunięcia:

SQL> SELECT TRUNC(CURRENT_DATE) - DATE '1998-12-09' FROM DUAL;

TRUNC(CURRENT_DATE)-DATE'1998-12-09'
------------------------------------
                                6169

Użyłem literałów daty ANSI dla ustalonej daty, ale możesz użyć istniejącej zmiennej lub kolumny daty lub sygnatury czasowej; lub to_date() lub to_timestamp() jeśli masz ciąg w innym formacie.

Możesz także użyć extract() aby przekonwertować składniki interwału na łączną wartość, jak pokazano tutaj ; a także upewnij się, że znasz różnicę między current_date i sysdate i odpowiedniki sygnatury czasowej .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje odpowiednik sp_getapplock, sp_releaseapplock w Oracle?

  2. ORACLE (11.2.0.1.0) - Rekurencyjne CTE z wyrażeniem daty

  3. kursor w spuście

  4. Jak zobaczyć aktualną instrukcję Oracle SQL, która jest wykonywana?

  5. EM12c Baza danych czasu spędzonego na oczekiwaniu na alerty