Ce petit post a pour but d’expliquer l’utilisation de la fonction SIGN pour comparer des dates.
A la base, cette fonction permet de savoir si un nombre est négatif, égal à zéro ou positif :
SELECT SIGN(-11) FROM DUAL; La fonction retourne -1
SELECT SIGN(0) FROM DUAL; La fonction retourne 0
SELECT SIGN(11) FROM DUAL; La fonction retourne 1
Nous allons utiliser la fonction SIGN pour comparer 2 dates et savoir si la DATE1 est antérieure, égale ou postérieure à la DATE2.
Syntaxe :
La syntaxe est la suivante :
SELECT SIGN(DATE1-DATE2) FROM DUAL;
Si DATE1 est antérieure à DATE2, alors la fonction retourne -1.
Si DATE1 est postérieure à DATE2, alors la fonction retourne 1.
Si DATE1 est égale à DATE2, alors la fonction retourne 0.
Exemple de requête qui retourne toujours 0 :
SELECT SIGN(SYSDATE-SYSDATE) FROM DUAL;
Exemple :
Nous avons des immeubles avec des dates de construction d’un côté et de l’autre nous avons des états réglementaires (l’amiante concerne les immeubles construit avant le 01/07/1997, le plomb concerne les immeubles construit avant le 01/01/1949) qui doivent être réalisés en fonction de cette date de construction.
Pour obtenir la colonne "A_REALISER", on utilise la syntaxe suivante :
DECODE(SIGN(DATE_APPLICATION-DATE_CONSTRUCTION),-1,'NON',0,'OUI',1,'OUI') AS A_REALISER