sql >> Database >  >> RDS >> Sqlserver

Hoe krijg je NextDayofWeek als je de datum passeert?

Het volgende werkt voor mij:

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

Om het vlees ervan uit te leggen, vind ik het verschil in de dag van de week voor de startdatum en de transactiedatum. Ik tel er 14 bij op omdat negatieve getallen modulo positieve getallen resulteren in een negatief getal, waardoor je volgende transactiedatum in het verleden zou liggen (en dat wil je niet). In het slechtste geval is @startDay 1 en @TransactionDay 7, wat leidt tot een verschil van -6. Het toevoegen van 7 zorgt ervoor dat dat verschil positief is, maar nog steeds in dezelfde equivalentieklasse als het werkelijke verschil in de ring n mod 7 (sorry... ik ben een beetje een wiskundige nerd).



  1. Speciaal teken converteren naar platte tekst in oracle

  2. QUERY- EN ECHO-gegevens IN HTML-INPUT-velden

  3. PHP-sessie + MySQL-bron

  4. Een index maken op een tijdstempel om de query te optimaliseren