91 votes

Obtenir les enregistrements du mois dernier dans SQL Server

Je veux obtenir les enregistrements du mois dernier en fonction de mon champ db table [member] "date_created".

Qu'est-ce qu'il y a de mieux à faire ?

Pour plus de précisions, le mois dernier - 1/8/2009 au 31/8/2009

Si c'est aujourd'hui le 01/03/2010, je dois récupérer les dossiers du 01/12/2009 au 31/12/2009.

128voto

Dave Barker Points 3068
SELECT * 
FROM Member
WHERE DATEPART(m, date_created) = DATEPART(m, DATEADD(m, -1, getdate()))
AND DATEPART(yyyy, date_created) = DATEPART(yyyy, DATEADD(m, -1, getdate()))

Vous devez vérifier le mois et l'année.

13voto

mrdenny Points 3359

Ajouter les options qui ont été fournies jusqu'à présent n'utilisera pas vos index du tout.

Quelque chose comme ça fera l'affaire, et utilisera un index sur la table (s'il en existe un).

DECLARE @StartDate DATETIME, @EndDate DATETIME
SET @StartDate = dateadd(mm, -1, getdate())
SET @StartDate = dateadd(dd, datepart(dd, getdate())*-1, @StartDate)
SET @EndDate = dateadd(mm, 1, @StartDate)

SELECT *
FROM Member
WHERE date_created BETWEEN @StartDate AND @EndDate

11voto

Rokas Points 41
DECLARE @StartDate DATETIME, @EndDate DATETIME
SET @StartDate = DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0)
SET @EndDate = DATEADD(mm, 1, @StartDate)

SELECT *
FROM Member
WHERE date_created BETWEEN @StartDate AND @EndDate

Une mise à niveau vers la solution de mrdenny, de cette façon, vous obtenez exactement le mois dernier de YYYY-MM-01

4voto

Kiran Madhav Points 60

Le mois dernier, considérer comme jusqu'au dernier jour du mois. 31/01/2016 ici le dernier jour du mois serait le 31 janvier, ce qui n'est pas similaire aux 30 derniers jours.

SELECT CONVERT(DATE, DATEADD(DAY,-DAY(GETDATE()),GETDATE()))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X