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);