Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment obtenir NextDayofWeek si vous dépassez la date ?

Ce qui suit fonctionne pour moi :

declare @TransactionDate DATETIME
DECLARE @TransactionDay tinyint
declare @startDate datetime
declare @startDay int
declare @NextTransactionDate datetime
--Monday
set @TransactionDate = '2011-05-05'
SET @TransactionDay = DATEPART(dw, @TransactionDate)
--Wednesday
set @startDate = '2011-04-27'
set @startDay = datepart(dw,@startDate)



set @NextTransactionDate= DATEADD(DAY, ((@startDay - @TransactionDay) + 7) % 7 ,@TransactionDate);  

select @startDay, DATEPART(dw, @NextTransactionDate), @NextTransactionDate

Pour expliquer le fond, je trouve la différence dans le jour de la semaine pour le startDate et le transactionDate. J'y ajoute 14 car les nombres négatifs modulo les nombres positifs donnent un nombre négatif, ce qui placerait votre prochaine date de transaction dans le passé (et vous ne le souhaitez pas). Le pire des cas est lorsque @startDay vaut 1 et @TransactionDay vaut 7, ce qui entraîne une différence de -6. L'ajout de 7 garantit que cette différence est positive mais toujours dans la même classe d'équivalence que la différence réelle dans l'anneau n mod 7 (désolé... je suis un peu un nerd en maths).