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

chia phạm vi ngày thành các tháng

Truy vấn sau sẽ thực hiện thủ thuật. CTE (WITH mệnh đề) tự động tạo một số dữ liệu Tháng mà chúng ta có thể sử dụng để kết hợp với nhau.

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. Cách bật CDC trên Tập hợp bảng HOẶC Bật trên tất cả các bảng trong cơ sở dữ liệu trong SQL Server - Hướng dẫn sử dụng SQL Server

  2. SQL Server 2005 - sử dụng chuỗi được tạo thay vì cột Identity?

  3. Nhận chi tiết tài khoản dịch vụ của dịch vụ đại lý SQL

  4. Kỹ thuật đảo ngược ngủ đông trong Netbeans không thể tìm thấy bảng SQL Server

  5. T-SQL Truy vấn một bảng ma trận cho vị trí trống