2010-08-06 3 views
4

Je dois écrire une instruction SQL Select pour sélectionner tous les enregistrements où DateCreated tombe un week-end pour les 4 dernières semaines. Je sais que je peux le faire en codant en dur le select comme celui ci-dessous. Mais je me demandais s'il y avait un moyen plus facile d'utiliser les fonctions de date T-sql.SQL - Sélectionne uniquement les enregistrements des week-ends

SELECT * FROM audit_table 
WHERE DateCreated BETWEEN '07-31-2010 00:00:00' AND '08-01-2010 23:59:59' 
    OR DateCreated BETWEEN '07-24-2010 00:00:00' AND '07-25-2010 23:59:59' 
    OR DateCreated BETWEEN '07-17-2010 00:00:00' AND '07-18-2010 23:59:59' 
    OR DateCreated BETWEEN '07-10-2010 00:00:00' AND '07-11-2010 23:59:59' 

Répondre

13

essayer

where DateCreated >= DATEADD(DD, DATEDIFF(dd, 0, DATEADD(WK,-4,GETDATE()))+0, 0) 
and datepart(dw,DateCreated) in (1,7) -- Sat and Sun only 

[Modifier] Voir les commentaires à propos datefirst [/ Modifier]

+0

Notez que vous devez se méfier de ce que l'installation de SQL Server pense est le premier jour de la semaine - voir la documentation de '@@ DATEFIRST' - http://msdn.microsoft.com/fr-fr/library/ms187766.aspx –

+0

' DateCreated> = cast (floor (cast (DATEADD (WK, -4, GETDATE()) comme float)) comme datetime) ':) – dotjoe

+0

Et sur SQL 2008, vous pouvez faire CONVERT (DATE, DATEADD (WK, -4, GETDATE())) – SQLMenace

3

Consultez la deuxième réponse sur GETDATE last month. Il a un aperçu assez robuste de différentes façons d'obtenir des dates de SQL. Plus précisément, il liste "dateadd (ms, -3, dateadd (wk, datiff (wk, 0, getdate()) + 1, 0))" comme un moyen d'obtenir ce week-end. Cela peut facilement être traduit pour obtenir les week-ends dont vous avez besoin.

Questions connexes