sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo obtener NextDayofWeek si pasa la fecha?

Lo siguiente funciona para mí:

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

Para explicar el meollo de esto, estoy encontrando la diferencia en el día de la semana para la fecha de inicio y la fecha de transacción. Le agrego 14 porque los números negativos módulo números positivos dan como resultado un número negativo, lo que pondría su próxima fecha de transacción en el pasado (y no quiere eso). El peor de los casos es cuando @startDay es 1 y @TransactionDay es 7, lo que genera una diferencia de -6. Agregar 7 asegura que esa diferencia sea positiva pero aún en la misma clase de equivalencia que la diferencia real en el anillo n mod 7 (lo siento... soy un poco nerd de las matemáticas).