个人主页

SqlServer Divide Date Range

SELECT 
 
CASEWHEN BeginDate > MonthStart THEN BeginDate ELSE MonthStart ENDAS BeginDate, 
 
CASEWHEN EndDate   < MonthEnd   THEN EndDate   ELSE MonthEnd   ENDAS EndDate, 
 
 /* other columns as needed */ 
FROM( 
 
SELECT 
    d
.*,  /* or you could be more specific here */ 
   
( 
      DATEADD
(month, DATEDIFF(month,0, d.BeginDate)+ v.number,0) 
   
)AS MonthStart, 
    DATEADD
(day,-1, 
      DATEADD
(month, DATEDIFF(month,0, d.BeginDate)+ v.number +1,0) 
   
)AS MonthEnd 
 
FROM RowsOfData d 
   
INNERJOIN master..spt_values v ON v.type ='P' 
     
AND v.number BETWEEN0AND DATEDIFF(month, d.BeginDate, d.EndDate) 
)

posted on 2012-01-19 11:53  beck99  阅读(134)  评论(0)    收藏  举报