web-dev-qa-db-fra.com

comment obtenir les données de la semaine en cours uniquement dans SQL Server?

Je veux des enregistrements de la table qui stocke la date actuelle lorsqu'un enregistrement est inséré dans la semaine en cours uniquement.

J'ai essayé:

SELECT PId 
,WorkDate 
,Hours          
,EmpId            
FROM Acb       
WHERE EmpId=@EmpId AND WorkDate BETWEEN DATEADD(DAY, -7, GETDATE()) AND GETDATE()
21
sona

Fais-le comme ça:

SET DATEFIRST 1 -- Define beginning of week as Monday
SELECT [...]
AND WorkDate >= dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) 
AND WorkDate <  dateadd(day, 8-datepart(dw, getdate()), CONVERT(date,getdate()))

Explication:

  • datepart(dw, getdate()) renverra le numéro du jour de la semaine en cours, de 1 à 7, en commençant par ce que vous avez spécifié en utilisant SET DATEFIRST .
  • dateadd(day, 1-datepart(dw, getdate()), getdate()) soustrait le nombre de jours nécessaires pour atteindre le début de la semaine en cours
  • CONVERT(date,getdate()) est utilisé pour supprimer la partie heure de GETDATE (), car vous voulez que les données commencent à minuit.
27
Twinkles

Une meilleure façon serait

select datepart(ww, getdate()) as CurrentWeek

Vous pouvez également utiliser wk au lieu de ww.

Documentation Datepart

7
Henrik Erlandsson

datepart(dw, getdate()) est le jour de la semaine en cours, dateadd(day, 1-datepart(dw, getdate()), getdate()) doit être le premier jour de la semaine, ajoutez-y 7 pour obtenir le dernier jour de la semaine

1
Zdravko Danev

Son travail pour moi.

Select * From Acb Where WorkDate BETWEEN DATEADD(DAY, -7, GETDATE()) AND DATEADD(DAY, 1, GETDATE())

Vous devez mettre cette ligne après la clause AND AND DATEADD(DAY, 1, GETDATE())

1
Usama