sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan får man NextDayofWeek, hvis du passerer datoen?

Følgende virker for 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

For at forklare kødet af det, finder jeg forskellen i ugedagen for startdatoen og transaktionsdatoen. Jeg tilføjer 14 til det, fordi negative tal modulo positive tal resulterer i et negativt tal, som ville lægge din næste transaktionsdato i fortiden (og det ønsker du ikke). Det værste tilfælde er, når @startDay er 1 og @TransactionDay er 7, hvilket fører til en forskel på -6. Tilføjelse af 7 sikrer, at den forskel er positiv, men stadig i samme ækvivalensklasse som den faktiske forskel i ringen n mod 7(undskyld... jeg er lidt af en matematiknørd).



  1. Hvad er ændret mellem postgres jdbc 8.4 og 9 vedrørende bytearrays?

  2. JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() i MySQL:Hvad er forskellen?

  3. Oracle Dynamic SQL-eksempel til at indsætte en post ved hjælp af DBMS_SQL

  4. Indsættelse af billedfil med PyQt5 i MySQL-databasetabelkolonnen