Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разбить временной отрезок по месяцам / 5 сообщений из 5, страница 1 из 1
14.03.2018, 11:03
    #39614605
SQLnoob111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить временной отрезок по месяцам
Подскажите пожалуйста, как из отрезка даты (@Begin, @End) получить все отрезки с начала месяца.

Например есть переменные
Код: sql
1.
2.
3.
DECLARE
  @Begin date = '2018-01-21',
  @End   date = '2018-03-12'




Хочутся получить таблицу с тремя записи:
'2018-01-21', '2018-01-31'
'2018-02-01', '2018-02-28'
'2018-03-01', '2018-03-12'
...
Рейтинг: 0 / 0
14.03.2018, 11:06
    #39614612
Ken@t
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить временной отрезок по месяцам
Календарь ? не знаю, такое
...
Рейтинг: 0 / 0
14.03.2018, 11:22
    #39614618
.Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить временной отрезок по месяцам
...рекурсия, цикл, размножающая строки таблица...
...
Рейтинг: 0 / 0
14.03.2018, 11:24
    #39614619
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить временной отрезок по месяцам
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DECLARE
  @Begin date = '2018-01-21',
  @End   date = '2018-03-12';
WITH Periods(DateBegin,DateEnd) AS
(
 SELECT @Begin,CAST(CASE WHEN @End<DATEADD(DAY,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Begin),0)) THEN @End ELSE DATEADD(DAY,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Begin),0)) END AS DATE)
 UNION ALL
 SELECT CAST(DATEADD(MONTH,1+DATEDIFF(MONTH,0,DateBegin),0) AS DATE),CAST(CASE WHEN @End<DATEADD(DAY,-1,DATEADD(MONTH,2+DATEDIFF(MONTH,0,DateBegin),0)) THEN @End ELSE DATEADD(DAY,-1,DATEADD(MONTH,2+DATEDIFF(MONTH,0,DateBegin),0)) END AS DATE)
 FROM Periods
 WHERE DateEnd<@End
)
SELECT * FROM Periods;
...
Рейтинг: 0 / 0
14.03.2018, 11:28
    #39614624
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить временной отрезок по месяцам
если есть таблица чисел то упростится.Если нет

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE
  @Begin date = '2018-01-21',
  @End   date = '2018-03-12';

WITH x(Id) AS
(
	SELECT 
		ROW_NUMBER() OVER (ORDER BY 1/0)
	FROM master..spt_values
) 
SELECT 
	CAST(DATEADD(month,x.Id,0) as DATE), 
	EOMONTH(DATEADD(month,x.Id,0))
FROM x
WHERE x.Id BETWEEN DATEDIFF(month,0,@Begin) AND DATEDIFF(month,0,@END) 
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разбить временной отрезок по месяцам / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]