2009-12-04 2 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

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 настроен на использование чего-то еще, вы можете использовать set dateformat. Это позволяет изменить настройки только для вашей сессии. Для dmy, это работает так:

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