Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để nhận NextDayofWeek nếu bạn vượt qua ngày?

Những điều sau đây phù hợp với tôi:

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

Để giải thích cơ bản của nó, tôi đang tìm sự khác biệt trong ngày trong tuần cho Ngày bắt đầu và Ngày giao dịch. Tôi thêm 14 vào nó bởi vì số âm modulo số dương dẫn đến một số âm, điều này sẽ đặt ngày giao dịch tiếp theo của bạn trong quá khứ (và bạn không muốn điều đó). Trường hợp xấu nhất là khi @startDay là 1 và @TransactionDay là 7, dẫn đến sự khác biệt là -6. Việc thêm số 7 đảm bảo rằng sự khác biệt đó là dương nhưng vẫn ở cùng một lớp tương đương với sự khác biệt thực tế trong vòng n mod 7 (xin lỗi ... tôi hơi mê toán).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu kiểm tra kết thúc CTE đệ quy

  2. 3 cách để lấy giản đồ của một tập hợp kết quả trong SQL Server

  3. Chuỗi định dạng ngày / giờ chuẩn được hỗ trợ bởi FORMAT () trong SQL Server

  4. Khung thực thể không hoạt động với bảng tạm thời

  5. Tìm gói SSIS ngày triển khai / sửa đổi lần cuối - SQL Server