Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получите NextDayofWeek, ако преминете датата?

Следното работи за мен:

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

За да обясня същината на това, намирам разликата в деня от седмицата за началната дата и датата на транзакция. Добавям 14 към него, защото отрицателните числа по модула на положителните числа водят до отрицателно число, което би поставило датата на следващата ви транзакция в миналото (а вие не искате това). Най-лошият случай е, когато @startDay е 1 и @TransactionDay е 7, което води до разлика от -6. Добавянето на 7 гарантира, че тази разлика е положителна, но все още е в същия клас на еквивалентност като действителната разлика в пръстена n mod 7 (съжалявам... аз съм малко маниак по математика).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sql сървър - свържете се с удостоверяване на Windows

  2. Намерете зависимостта на колоната

  3. EXEC sp_executesql с множество параметри

  4. Как да отворите SQL Server 2012 с помощта на подкана за изпълнение

  5. Показване на връзката родител-дете, когато родител и дете се съхраняват в една и съща таблица