T-SQL sélectionne les loggings pour le mois

J'ai une table appelée logD , avec un champ nommé date (type datefield). Le format est "année-mois-jour" IE: 2011-04-11

Si la date d'aujourd'hui est 2011-07-31, je veux tous les records pour le mois de juillet. Si la date d'aujourd'hui est 2011-02-14, je veux tous les loggings pour le mois de février et ainsi de suite.

J'utilise SQL 2008 et les services de reporting pour générer un rapport mensuel.

Essaye ça:

 SELECT * FROM logD WHERE YEAR(DATE) = YEAR(GetDate()) AND MONTH(DATE) = MONTH(GetDate()) 

Si vous avez un index sur la colonne DATE vous pouvez essayer celui-ci:

 SELECT * FROM logD WHERE [DATE] BETWEEN CONVERT(VARCHAR(6),GETDATE(),112)+'01' AND DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(VARCHAR(6),GETDATE(),112)+'01')) 

Mais, mec, ça a l'air moche …

Essaye ça:

 DECLARE @firstOfMonth smalldatetime = dateadd(month,datediff(month,0,getdate()),0); SELECT * FROM logD WHERE [date] > @firstOfMonth AND [date] < dateadd(month,1,@firstOfMonth);