sql >> Databáze >  >> RDS >> Sqlserver

Jak získat NextDayofWeek, pokud projdete termínem?

Pro mě funguje následující:

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

Abych vysvětlil podstatu toho, nacházím rozdíl v dni v týdnu pro počáteční datum a datum transakce. Přidávám k tomu 14, protože záporná čísla modulo kladná čísla vedou k zápornému číslu, které by posunulo datum vaší další transakce do minulosti (a to nechcete). Nejhorší případ je, když @startDay je 1 a @TransactionDay je 7, což vede k rozdílu -6. Přidání 7 zajišťuje, že tento rozdíl je kladný, ale stále ve stejné třídě ekvivalence jako skutečný rozdíl v prstenci n mod 7 (omlouvám se... jsem tak trochu matematický pitomec).



  1. MySQL spouští nastavené hodnoty pro NOVÝ řádek a aktualizuje další ve stejné tabulce

  2. Navázání prázdného seznamu nebo hodnoty null na parametr s hodnotou tabulky v uložené proceduře (.NET)

  3. Načíst data z SQL databáze a zobrazit v tabulkách - Zobrazení určitých dat podle zaškrtnutých políček

  4. Duplicitní sloupec po přepnutí ze sériového na datový typ identity v PostgreSQL / pgAdmin4