sql >> Databasteknik >  >> RDS >> Sqlserver

Hur får man NextDayofWeek om man passerar datumet?

Följande fungerar för mig:

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

För att förklara köttet av det, jag hittar skillnaden i veckodag för startDate och transaktionsdatum. Jag lägger till 14 eftersom negativa tal modulo positiva tal resulterar i ett negativt tal, vilket skulle lägga ditt nästa transaktionsdatum i det förflutna (och det vill du inte). Det värsta fallet är när @startDay är 1 och @TransactionDay är 7 vilket leder till en skillnad på -6. Att lägga till 7 säkerställer att den skillnaden är positiv men fortfarande i samma ekvivalensklass som den faktiska skillnaden i ringen n mod 7(förlåt... jag är lite av en mattenörd).



  1. Ställ in PDO för att skapa undantag som standard

  2. Hur man uppdaterar datagrid i WPF

  3. Samla schemastatistik med FND_STATS i EBS 11i och R12

  4. Hur infogar man en post med bara standardvärden?