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()
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 coursCONVERT(date,getdate())
est utilisé pour supprimer la partie heure de GETDATE (), car vous voulez que les données commencent à minuit.Une meilleure façon serait
select datepart(ww, getdate()) as CurrentWeek
Vous pouvez également utiliser wk au lieu de ww.
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
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())