Oracle
 sql >> Base de données >  >> RDS >> Oracle

TIMESTAMPDIFF dans Oracle 11g ?

Cette fonction n'existe pas dans Oracle RDMBS ; c'est clairement le cas dans Oracle Lite (que je n'ai jamais rencontré) et je crois que c'est dans d'autres bases de données comme MySQL.

Il existe une documentation couvrant arithmétique datetime et intervalle qui vous fera faire une partie du chemin; vous pouvez soit soustraire un horodatage d'un autre; ou une date d'une autre, ou un mélange des deux - mais il est plus simple de s'en tenir à un type de données. Selon celui que vous utilisez, vous obtiendrez soit un intervalle, soit un nombre représentant le nombre de jours :

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

Si vous voulez juste le nombre de jours entiers, vous pouvez utiliser extract() pour que l'intervalle obtienne uniquement l'élément souhaité, ou trunc() pour le nombre pour supprimer la partie décimale :

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

Vous pouvez également trunc() la date actuelle avant la comparaison si vous préférez, donc vous comparez les deux à minuit, ce qui signifie qu'il n'y aura pas de fraction de jour à supprimer :

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

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

J'ai utilisé des littéraux de date ANSI pour la date fixe, mais vous pouvez utiliser une variable ou une colonne de date ou d'horodatage existante. ou to_date() ou to_timestamp() si vous avez une chaîne dans un format différent.

Vous pouvez également utiliser extract() pour convertir les composants d'un intervalle en une valeur combinée, comme indiqué ici ; et assurez-vous également que vous êtes conscient de la différence entre current_date et sysdate , et les équivalents d'horodatage .