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

membagi rentang tanggal menjadi bulan

Kueri berikut harus berhasil. CTE (WITH klausa) secara dinamis menghasilkan beberapa data Bulan yang dapat kita gunakan untuk bergabung.

declare @test table (
    userid char(1),
    project char(4),
    startdate datetime,
    enddate datetime)

insert into @test
select 'A', 'abc1', '1/1/2011', '12/31/2011'
union select 'A', 'abc2', '1/1/2011', '5/1/2011'
union select 'B', 'xyz1', '1/1/2011', '3/1/2011'

--select * from @test

;with MonthList as (
    select 
        DATEADD(month, M, '12/1/1899') as 'FirstDay',
        dateadd(day, -1, dateadd(month, M + 1, '12/1/1899')) as 'LastDay',
        DATEADD(month, M + 1, '12/1/1899') as 'FirstDayNextMonth'
    from (
        select top 3000 ROW_NUMBER() over (order by s.name) as 'M'
        from master..spt_values s) s
)

select
    t.userid, t.project, ml.FirstDay, ml.LastDay
from
    @test t
    inner join MonthList ml
        on  t.startdate < ml.FirstDayNextMonth
            and t.enddate >= ml.FirstDay


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbarui Kueri di SQL Server melalui GABUNG

  2. Buat Kolom Terhitung yang Menggunakan Data dari Tabel Lain di SQL Server

  3. Permintaan Sederhana untuk Mendapatkan Nilai Maks untuk setiap ID

  4. Apakah SQL Server membuat indeks Non berkerumun di semua kolom tabel secara default?

  5. Menghubungkan Genero ke SQL Server