2010-02-03 2 views
4

J'ai une table dans ma base de données SQL Server appelée « éléments » qui a une colonne appelée « dateFinished ».serveur SQL - Sélectionner tous les éléments avec une date au mois précédent

J'ai un script qui sera exécuté le 1er jour de chaque mois et qui doit sélectionner tous les éléments terminés le mois précédent. Ainsi, par exemple, le 1er février, il faudra sélectionner tous les éléments dont la dateFinished est supérieure ou égale à 00:00 le 1er janvier et inférieure à 00:00 le 1er février.

il doit également travailler à travers de nouvelles années (par exemple DEC - JAN).

Des idées?

Répondre

7

Vous pourriez obtenir un jour du mois précédent avec dateadd(m,-1,getdate()). Ensuite, filtrer l'année et le mois de cette date dans une clause where, comme:

select * 
from items 
where datepart(yy,dateFinished) = datepart(yy,dateadd(m,-1,getdate())) 
and datepart(m,dateFinished) = datepart(m,dateadd(m,-1,getdate())) 

Cela devrait fonctionner sur plusieurs années, et même si la requête est exécutée un jour plus tard que le premier du mois.

8
Select * 
    from items 
where datefinished >= dateadd(m, datediff(m, 0, GETDATE()) - 1, 0) 
    AND datefinished < dateadd(m, datediff(m, 0, GETDATE()), 0) 
+0

+1 aucune fonction sur les colonnes de table = capables d'utiliser un indice – gbn

+0

@gbn: Intéressant, mais je ne pense pas que les indices peuvent aider à une gamme filtre – Andomar

+1

Vous obtiendrez généralement un index recherche dans le plan sur ce genre de requête, dans mon expérience ... –

1

simple il suffit d'utiliser ce que je viens d'utiliser: DATEDIFF(mm,dateFinished,GETDATE()) = 1

SELECT * 
FROM items 
WHERE DATEDIFF(mm,dateFinished,GETDATE()) = 1 
Questions connexes