Je ne peux pas utiliser MONTHS_BETWEEN, seulement jouer avec DATEs est autorisé, alors je suis ceci:Oracle - Sélection des employés qui ont été embauchés au cours des 20 dernières années
select * from emp
where ((SYSDATE- hiredate)/(365+1/4-1/100+1/400)) >= ((SYSDATE/(365+1/4-1/100+1/400))-20);
Je ne comprends pas pourquoi je suis erreur dans
(SYSDATE/(365+1/4-1/100+1/400))-20
disant qu'il est un type de données non valide "dataTypes incohérents: attendu% s a% s" quand
(SYSDATE-hiredate)/(365+1/4-1/100+1/400)
i s fonctionne correctement sans erreur, WTF?
PS: un exemple d'utilisation (365 + 1/4-1/100 + 1/400) est avec la date de naissance, pour plus de précision:
((SYSDATE- birth_date)/(365+1/4-1/100+1/400)) >=18
Peut-être en utilisant 'hiredate> = ADD_MONTHS (sysdate, -12 * 20)' ou des intervalles serait plus clair. – Glenn
Je voudrais essayer quelque chose comme select to_number (sysdate-to_date ('19940610', 'yyyymmdd'))/7305 à partir de dual; puis comparez-le (Note: 20 ans auront toujours un nombre fixe de jours) – user3570335