2008-09-24 4 views
0

(Oracle) Je dois retourner tous les enregistrements des 12 derniers mois. Comment faire cela en PL/SQL?Oracle Datadiff

EDIT: Désolé, j'ai oublié d'expliquer, j'ai une colonne de type de données

Répondre

-1
SELECT * 
FROM table 
WHERE date_column > SYSDATE - 365 
+0

pas année bissextile compatible –

0
SELECT * 
FROM table 
WHERE date_column > ADD_MONTHS(SYSDATE, -12) 

Je ne sais pas que je méritais vers le bas-modding pour les postes précédents ... essayait seulement d'aider .

+0

Il n'y a pas de fonction telle que ROLL_MONTHS dans Oracle –

+0

Bugger ... Je voulais dire ADD_MONTHS – cagcowboy

+0

Juste parce que vous avez essayé d'aider ne signifie pas que la réponse était bonne. Je suis sûr que la plupart des gens essaient seulement d'aider. Ne soyez pas offensé par les mods, apprenez d'eux. –

3

Faire cela en PL/SQL est presque synonyme de le faire en SQL.

SELECT * 
FROM table 
WHERE date_column >= ADD_MONTHS(TRUNC(SYSDATE),-12) 

Vous pourriez aimer bricoler avec la déclaration TRONQUE pour obtenir exactement la plage que vous voulez - j'utilisé TRUNC (SYSDATE) qui est le même que TRUNC (SYSDATE, « D ») - à savoir. supprimer la partie heure du sysdate. Par exemple, si elle est actuellement le 12 août, mais vous voulez des valeurs de février 01 au lieu de 12 février utilisent alors:

SELECT * 
FROM table 
WHERE date_column >= ADD_MONTHS(TRUNC(SYSDATE,'MM'),-12) 

Aussi, voir la documentation pour le traitement des mois ayant un nombre différent de jours: http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions004.htm#SQLRF00603