web-dev-qa-db-fra.com

Comment puis-je obtenir l'année en cours en utilisant SQL sur Oracle?

Je dois ajouter l'année en cours en tant que variable dans une instruction SQL. Comment puis-je récupérer l'année en cours à l'aide de SQL?

c'est à dire.

 ENTRE 
 TO_DATE ('01/01 /**année actuelle** 00:00:00 ',' JJ/MM/AAAA HH24: MI: SS ') 
 ET 
 TO_DATE ('31/12 /**année actuelle** 23:59:59 ',' JJ/MM/AAAA HH24: MI: SS ') 
57
Craig Angus

En utilisant to_char:

select to_char(sysdate, 'YYYY') from dual;

Dans votre exemple, vous pouvez utiliser quelque chose comme:

BETWEEN trunc(sysdate, 'YEAR') 
    AND add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60;

Les valeurs de comparaison correspondent exactement à ce que vous demandez:

select trunc(sysdate, 'YEAR') begin_year
     , add_months(trunc(sysdate, 'YEAR'), 12)-1/24/60/60 last_second_year
from dual;

BEGIN_YEAR  LAST_SECOND_YEAR
----------- ----------------
01/01/2009  31/12/2009
99
FerranB

Une autre option est:

SELECT *
  FROM TABLE
 WHERE EXTRACT( YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate) 
60
borjab

Utilisez la fonction extract(datetime) c'est si simple, si simple.

Il retourne l'année, le mois, le jour, la minute, la seconde

Exemple:

select extract(year from sysdate) from dual;
15

Depuis que nous faisons cela à mort - vous n'avez pas à spécifier une année:

select * from demo
where  somedate between to_date('01/01 00:00:00', 'DD/MM HH24:MI:SS')
                and     to_date('31/12 23:59:59', 'DD/MM HH24:MI:SS');

Toutefois, la réponse acceptée par FerranB est plus logique si vous souhaitez spécifier toutes les valeurs de date comprises dans l'année en cours.

1
William Robertson

Une autre option serait:

SELECT * FROM mytable
 WHERE TRUNC(mydate, 'YEAR') = TRUNC(SYSDATE, 'YEAR');
1
David Faber