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