2013-04-09 4 views
-1

Я хочу, чтобы получить только дату начала месяца между выбранной датой НачалаПолучить дату месяца между датой начала и датой окончания

например:

start date = 2012 -05-01 
end date = 2013-04-01

Я хочу, как этот

 
    Dates : 
    2012 -05-01 
    2012 -06-01 
    2012 -07-01 ..... 
    2013 -01-01 ..... 
    2012 -05-01
+0

Проверьте это: http://stackoverflow.com/questions/1520789/how-can-i-select-the-first-day-of-a-month-in-sql –

+0

Этот вопрос не показывает никаких исследований усилия. Очень важно сделать домашнее задание **. Расскажите нам, что вы нашли, и *** почему *** это не соответствовало вашим потребностям. Это демонстрирует, что вы потратили время, чтобы попытаться помочь себе, это избавляет нас от повторения очевидных ответов и, прежде всего, помогает вам получить более конкретный и релевантный ответ. [FAQ] (http://stackoverflow.com/questions/how-to-ask). – Kermit

ответ

1

КТР будет делать трюк

Declare @beginDt SmallDatetime = '13 Jan 2012' 
    Declare @endDt SmallDatetime = '2 Apr 2013'; 
    With MonthList(aMon) 
     As 
     (Select DateAdd(month, datediff(month, 0, @beginDt), 31) 
     Union All 
     Select DateAdd(month, 1, aMon) From MonthList 
     Where DateAdd(month, 1, aMon) < @endDt) 
     Select aMon from MonthList 
+0

Помните о максимальной рекурсии CTE. Этот код не может генерировать 9-летние данные. –

0

Во-первых, create a calendar table. Тогда вы можете написать простой запрос:

select [Date] 
from dbo.Calendar 
where IsFirstDayOfMonth = 1 and [Date] between '20120501' and '20130401' 

Этот запрос гораздо яснее, чем при использовании с использованием функции на основе решения и таблицы календаря имеет много других применений тоже.

Смежные вопросы