2016-10-19 2 views

Répondre

1
select * from tablename where month(columndate)>month(getdate()) and 
year(columndate)>=year(getdate()) 
+0

Mais si vous utilisez par exemple cette requête en octobre 2016, elle ne prendra en compte que Nov-Dec 2016, Nov-Dec 2017, Nov-Dec 2018 et ainsi de suite. Je ne pense pas que c'était l'exigence. – Twinkles

0

Essayez ceci:

Select * from table1 WHERE 
    ((DATEPART(MONTH,datesetto) > DATEPART(MONTH,GETDATE()) 
    AND DATEPART(YEAR,datesetto) = DATEPART(YEAR,GETDATE())) 
    OR (DATEPART(YEAR,datesetto) > DATEPART(YEAR,GETDATE()))) 

DATEPART(Month,GETDATE()) donnera le mois de la date actuelle e et vous pouvez le comparer avec le datesetto

Mise à jour: La requête ci-dessus fournira des données pour les mois plus que le mois en cours et un mois plus dans l'année que l'année en cours.

+0

Cela retournera un résultat correct, mais ne sera-t-il pas lent car il ne peut pas profiter d'un index sur datesetto? – Twinkles

0
SELECT * FROM table1 
WHERE datesetto >= DATEADD(month, DATEDIFF(month, 0, getdate())+1, 0) 

Explication:

  • DATEDIFF(month, 0, getdate()) calcule combien de mois se sont écoulés depuis 1900-01-01.
  • DATEADD(month, DATEDIFF(month, 0, getdate()), 0) renvoie le début de ce mois.
  • DATEADD(month, DATEDIFF(month, 0, getdate())+1, 0) renvoie le début du mois prochain.