Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

दिनांक सीमा को महीनों में विभाजित करें

निम्नलिखित क्वेरी को चाल चलनी चाहिए। CTE (WITH क्लॉज) गतिशील रूप से कुछ महीना डेटा उत्पन्न करता है जिसका उपयोग हम इसमें शामिल होने के लिए कर सकते हैं।

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. SQL सर्वर - WHERE क्लॉज में CASE का उपयोग करना

  2. SQL सर्वर में वास्तविक एक-से-एक संबंध कैसे बनाएं

  3. यूनिकोड वर्णों वाले कॉलम में मान खोजने के लिए SQL Server 2008 तालिका को क्वेरी करना

  4. SQL सर्वर (T-SQL) में डेटाबेस मेल के लिए एक डिफ़ॉल्ट सार्वजनिक प्रोफ़ाइल बनाएँ

  5. अल्पविराम सीमांकित स्ट्रिंग से बल्क इंसर्ट