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 ')
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
Une autre option est:
SELECT *
FROM TABLE
WHERE EXTRACT( YEAR FROM date_field) = EXTRACT(YEAR FROM sysdate)
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;
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.
Une autre option serait:
SELECT * FROM mytable
WHERE TRUNC(mydate, 'YEAR') = TRUNC(SYSDATE, 'YEAR');