Question

Comment puis-je retourner un ensemble de lignes comprenant les quatre dernières années, en fonction de la date actuelle?

Si cette requête se exécute sur 12/31/2010 il devrait revenir:

2007
2008
2009
2010

Mais si elle est exécutée sur 1/1/2011, il doit revenir:

2008
2009
2010
2011

Voici ce que j'ai commencé avec, deux requêtes qui retournent l'année de départ. Je préfère la seconde pour me convertir à la chaîne se sent sale bits.

SELECT TO_CHAR(TRUNC(sysdate, 'YY') - INTERVAL '3' YEAR, 'YYYY') FROM DUAL;
SELECT EXTRACT (YEAR FROM sysdate) - 3 FROM DUAL;

Mais je ne sais pas comment générer des lignes à chair cela. Dans I SQL Server utilise un CTE voudrais comme dans

Autres conseils

Pour nombre d'affichage de 1 à 100:

SELECT  LEVEL 
FROM DUAL
CONNECT BY LEVEL <= 100
ORDER BY LEVEL

Pour modifier le maximum, changer dans la troisième ligne.

Tout comme la réponse acceptée, vous pouvez remplacer la vue en ligne avec la clause. Je trouve l'article avec plus lisible. En particulier si vous allez effectuer plusieurs calculs contre la sur la volée table NUMÉROS dans le cadre de la même requête - l'intégralité de l'instruction SQL est plus lisible

.

Tableau de nombres à la volée:

WITH NUMBERS_START_AT_ZERO AS
     (SELECT LEVEL - 1 AS NUM 
       FROM DUAL
       CONNECT BY LEVEL <= 4
       order by NUM desc)
SELECT  EXTRACT (YEAR FROM sysdate) - NUM AS YEARS
  FROM NUMBERS_START_AT_ZERO

Sortie:

YEARS
2009
2010
2011
2012
scroll top