Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara mendapatkan NextDayofWeek jika Anda melewati tanggal?

Berikut ini berfungsi untuk saya:

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

Untuk menjelaskan dagingnya, saya menemukan perbedaan hari dalam seminggu untuk startDate dan transactionDate. Saya menambahkan 14 karena angka negatif modulo angka positif menghasilkan angka negatif, yang akan menempatkan tanggal transaksi Anda berikutnya di masa lalu (dan Anda tidak menginginkannya). Kasus terburuk adalah ketika @startDay adalah 1 dan @TransactionDay adalah 7 yang menghasilkan perbedaan -6. Menambahkan 7 memastikan bahwa perbedaan itu positif tetapi masih dalam kelas kesetaraan yang sama dengan perbedaan sebenarnya di ring n mod 7(maaf... Saya sedikit kutu buku matematika).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan karakter antara 2 karakter khusus pertama dalam SQL

  2. Mendapatkan hasil prosedur tersimpan SQL ke dalam format data.frame menggunakan RODBC

  3. skrip aneh yang dihasilkan oleh SQL Server saat mengekspor pekerjaan

  4. Perilaku TSQL aneh dengan COALESCE saat menggunakan Order By

  5. Bagaimana cara menambahkan kolom identitas baru ke tabel di SQL Server?