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

Hasilkan kumpulan tanggal penambahan di TSQL

Jika tanggal Anda tidak lebih dari 2047 hari:

declare @dt datetime, @dtEnd datetime
set @dt = getdate()
set @dtEnd = dateadd(day, 100, @dt)

select dateadd(day, number, @dt)
from 
    (select number from master.dbo.spt_values
     where [type] = 'P'
    ) n
where dateadd(day, number, @dt) < @dtEnd

Saya memperbarui jawaban saya setelah beberapa permintaan untuk melakukannya. Mengapa?

Jawaban asli berisi subquery

 select distinct number from master.dbo.spt_values
     where name is null

yang memberikan hasil yang sama, seperti yang saya uji pada SQL Server 2008, 2012, dan 2016.

Namun, ketika saya mencoba menganalisis kode yang MSSQL secara internal ketika menanyakan dari spt_values , saya menemukan bahwa SELECT pernyataan selalu berisi klausa WHERE [type]='[magic code]' .

Oleh karena itu saya memutuskan bahwa meskipun kueri mengembalikan hasil yang benar, kueri memberikan hasil yang benar untuk alasan yang salah:

Mungkin ada versi SQL Server yang akan datang yang mendefinisikan [type] yang berbeda nilai yang juga memiliki NULL sebagai nilai untuk [name] , di luar kisaran 0-2047, atau bahkan tidak bersebelahan, dalam hal ini hasilnya akan salah.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Tips untuk Menjalankan Diagnostik SQL Server

  2. MASUKKAN NILAI YANG TIDAK ADA

  3. Cara Memulihkan Database SQL Server di Mac menggunakan SQL Operations Studio

  4. SQL Server 2016:Buat Pengguna Basis Data

  5. Bagaimana cara memperbaiki kesalahan 'Penyedia Pipa Bernama, kesalahan 40 - Tidak dapat membuka koneksi ke' SQL Server'?