Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zdobyć NextDayofWeek, jeśli mija termin?

U mnie działa:

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

Aby wyjaśnić sedno tego, znajduję różnicę w dniu tygodnia dla startDate i transactionDate. Dodaję do tego 14, ponieważ liczby ujemne modulo dodatnie dają liczbę ujemną, co oznaczałoby, że data następnej transakcji przeszłaby w przeszłość (a tego nie chcesz). Najgorszy przypadek ma miejsce, gdy @startDay to 1, a @TransactionDay to 7, co prowadzi do różnicy -6. Dodanie 7 zapewnia, że ​​różnica jest dodatnia, ale nadal w tej samej klasie równoważności, co rzeczywista różnica w pierścieniu n mod 7 (przepraszam... jestem trochę matematycznym frajerem).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pesymistyczny zamek w T-SQL

  2. SQL Server — łączenie dużych tabel bez blokowania danych

  3. serwer sql niepoprawna nazwa obiektu - ale tabele są wymienione na liście tabel SSMS

  4. Jak programowo wykonać kopię zapasową bazy danych SQL w C#

  5. SQL Server 2008 do SQL Server 2005