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

Bagaimana cara mendapatkan daftar Tanggal Mulai Minggu (Senin) dan Tanggal Akhir (Minggu) di antara dua tanggal?

Ini akan bekerja selama interval 38 tahun atau kurang. Ini akan menawarkan kinerja yang lebih baik dan tidak bergantung pada pengaturan lokal server.

Pengaturan ini akan menyebabkan skrip Anda mengembalikan hasil yang salah:

set datefirst 1
select * from dbo.fnGetWeeksBetweenDates('2014-03-21','2014-03-21')

Ini berarti setelan lokal Anda saat ini bertentangan dengan kebutuhan Anda dan kode Anda mengimbanginya.

Berikut adalah skrip. Skrip dibatasi hingga 38 tahun karena alasan kinerja (saya merasa tidak mungkin Anda memerlukan interval yang lebih besar dari itu). Akan cukup mudah untuk memperpanjangnya hingga beberapa tahun lagi.

DECLARE @FromDate DATE = '2014-03-21'    
DECLARE @ToDate DATE  = '2014-03-24'    

SELECT @fromdate = dateadd(day, datediff(day, 0, @FromDate)/7*7, 0), 
@todate = dateadd(day, datediff(day, 0, @ToDate)/7*7, 6)

SELECT dateadd(d, number * 7, @fromdate) Start_Week, 
dateadd(d, number * 7 + 6, @fromdate) End_Week
FROM
master..spt_values
WHERE type = 'P' and
@todate >= dateadd(d, number * 7, @fromdate)

Hasil:

Start_Week  End_Week
2014-03-17  2014-03-23
2014-03-24  2014-03-30


  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 Server:Kolom indeks digunakan seperti?

  2. Migrasi Kode Pertama dan Prosedur Tersimpan

  3. Mempertahankan integritas subclass dalam database relasional

  4. Kueri SQL Server Passthrough sebagai dasar untuk kumpulan data DAO di Access

  5. Kondisi Bersyarat di SQL Server