Comment déterminer la date de début hebdomadaire

J'ai une fonction stockée qui est supposée comprendre ma date de début de semaine pour la paie. Lequel est "jeudi" Cependant, ma procédure stockée obtient toujours ma date de début en tant que "vendredi" Quel est le problème avec mes fonctions de déclaration et de définition? Je veux que mon StartWeekDay soit "jeudi" … "lStartday" est mis à "5" dans la table de count Mon code est ci-dessous:

DECLARE @StartWeekDay int SET @StartWeekDay = (Select lStartDay From Account Where lLocationID = 1) DECLARE @CurrentDate DateTime SET @CurrentDate = GetDate() DECLARE @CurrentWeekDay int SET @CurrentWeekDay = DATEPART(dw,@CurrentDate) DECLARE @Diff int SET @Diff = @StartWeekDay - @CurrentWeekDay SET @Diff = Case When @Diff > 0 Then -6 When @Diff = 0 Then 0 Else @Diff End -- DECLARE @DaysToStart int SET @DaysToStart = (DatePart(dw,@CurrentDate) - @StartWeekDay) IF @DaysToStart <= .1 BEGIN SET @DaysToStart = @DaysToStart + 7 END DECLARE @myStartWeekDate DateTime --SET @myStartWeekDate = dbo.DateOnly(DATEADD(d,@Diff,@CurrentDate)) SET @myStartWeekDate = Convert(nvarchar,DateAdd(d,-@DaysToStart,@CurrentDate),101) -- getting DATE only -- 

lStartDay = 5 vous donnera toujours vendredi. vous devez append 4 pour jeudi

 DECLARE @DaysToStart int SET @DaysToStart = (DatePart(dw,@CurrentDate) - @StartWeekDay) IF @DaysToStart <= .1 BEGIN SET @DaysToStart = @DaysToStart + 7 END 

Si vous déclarez @DaysToStart et que DatePart renvoie aussi INT, pourquoi la comparaison avec .1 ??

La requête suivante est un moyen standard d'arrondir les dates au début de la semaine. Cela, cependant, est traité comme un lundi …

 DATEADD(WEEK, DATEDIFF(WEEK, 0, @YourDate), 0) 

Si vous compensez vos valeurs par 3, cela changera la fonction pour arrondir au jeudi précédent …

 DATEADD(WEEK, DATEDIFF(WEEK, 0, @YourDate-3), 3) 

EDIT: Cela aurait dû être 3, pas 4 …

 SET @yourDate = getDate() SET @firstDay = 3 SET @RoundedDate = DATEADD(WEEK, DATEDIFF(WEEK, 0, @YourDate-@firstDay), @firstDay) Value of @firstDay | Day of week this will round to --------------------+-------------------------------- 0 | Monday 1 | Tuesday 2 | Wednesday 3 | Thursday 4 | Friday 5 | Saturday 6 | Sunday 
  DECLARE @StartWeekDay int SET @StartWeekDay = 5 DECLARE @CurrentDate DateTime SET @CurrentDate = '8/24/2012' DECLARE @CurrentWeekDay int SET @CurrentWeekDay = DATEPART(dw,@CurrentDate) SELECT @CurrentWeekDay; DECLARE @Diff int SET @Diff = @StartWeekDay - @CurrentWeekDay SET @Diff = Case When @Diff > 0 Then -6 When @Diff = 0 Then 0 Else @Diff End -- DECLARE @DaysToStart int SET @DaysToStart = (DatePart(dw,@CurrentDate) - @StartWeekDay) --change here to <1 and not <=1 that will add 8 and return friday at the end IF @DaysToStart < 1 BEGIN SET @DaysToStart = @DaysToStart + 7 END SELECT @DaysToStart; DECLARE @myStartWeekDate DateTime --SET @myStartWeekDate = dbo.DateOnly(DATEADD(d,@Diff,@CurrentDate)) SET @myStartWeekDate = Convert(nvarchar,DateAdd(d,-@DaysToStart,@CurrentDate),101) SELECT @myStartWeekDate