2009-12-04 89 views
1
Start Date: (mm/dd/yyyy) 05/09/2007 
End Date: (mm/dd/yyyy) 08/20/2007 

同時給予使用上述值的開始日期和結束日期,需要顯示類似如下格式的報告。月明智顯示

注:需要單查詢

Start Date End Date 
05/09/2007 05/31/2007 
06/01/2007 06/30/2007 
07/01/2007 07/31/2007 
08/01/2007 08/20/2007 

請幫我這個查詢。

回答

2

您可以使用SQL Server 2005

DECLARE @StartDate DATETIME, 
     @EndDate DATETIME 

SELECT @StartDate = '09 May 2009', 
     @EndDate = '20 Aug 2009' 

;WITH CTE AS(
     SELECT @StartDate StartDate, 
       DATEADD(MM, 1, CAST('01 ' + DATENAME(mm, @StartDate) +' ' + CAST(DATEPART(yyyy, @StartDate) AS VARCHAR(4)) AS DATETIME)) - 1 EndDate 
     UNION ALL 
     SELECT EndDate + 1 StartDate, 
       CASE WHEN DATEADD(MM, 1, EndDate + 1) - 1 > @EndDate THEN @EndDate ELSE DATEADD(MM, 1, EndDate + 1) - 1 END EndDate 
     FROM CTE 
     WHERE EndDate < @EndDate 
) 
SELECT * 
FROM CTE 
+0

+1看起來你明白問題的嘗試這樣的事情:) – Andomar 2009-12-04 11:51:16

0

這裏的page with SQL Server datetime formats。您可以使用它:

select 
    convert(varchar(32), StartDate, 101) as StartDate 
, convert(varchar(32), EndDate, 101) as EndDate 
, ... 
from YourTable 
where StartDate between '2007-09-05' and '2007-08-20' 
or EndDate between '2007-09-05' and '2007-08-20' 

顯示在該時間範圍內結束或開始的行。

如果您想在「月 - 日 - 年」的格式輸入日期,但你的SQL Server的confiugred使用別的東西,你可以用set dateformat。這使您只能更改會話的設置。對於dmy,這就像:

set dateformat 'mdy' 
select cast('12/31/2009' as datetime)