Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить в запросе последовательность дат  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
Здравствуйте, есть вопрос, может и простой, но не сообразил что-то, как сделать.
Заданы две даты временного отрезка, например, начало с 1.1.2001 г., окончание 1.1.2012 г.
Нужно получить в результате sql-запроса строки:

1.1.2001
1.1.2002
..........
1.1.2012

Как, сделать запросом, не используя циклы while и не используя временную таблицу Можно еще каким-нибудь способом ?
5 май 12, 12:10    [12512701]     Ответить | Цитировать Сообщить модератору
 Re: Получить в запросе последовательность дат  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
CTE с числами
5 май 12, 12:15    [12512732]     Ответить | Цитировать Сообщить модератору
 Re: Получить в запросе последовательность дат  [new]
Гузы
Guest
Виктор_sql,
;with CTE ()
as
()

В поиск - было много раз.
"Последовательность дат".
5 май 12, 12:17    [12512750]     Ответить | Цитировать Сообщить модератору
 Re: Получить в запросе последовательность дат  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
Виктор_sql,

declare @s datetime = '20010101', @e datetime = '20120101';
with 
v as(select * from ( values(1),(2),(3),(4),(5) ) v(i)),
nums as (select n = row_number() over (order by(select null))-1 from v v1 cross join v v2 cross join v v3 cross join v v4 cross join v v5)
select dateadd(yy,n,@s) from nums
where n <= datediff(yy,@s,@e)
;
5 май 12, 12:27    [12512834]     Ответить | Цитировать Сообщить модератору
 Re: Получить в запросе последовательность дат  [new]
Виктор_sql
Member

Откуда:
Сообщений: 98
Спасибо!
10 май 12, 05:39    [12527994]     Ответить | Цитировать Сообщить модератору
 Re: Получить в запросе последовательность дат  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
WITH DateList([Date]) as
(SELECT CAST('2001-01-01' AS date)
UNION ALL
SELECT (DATEADD(YEAR, 1, [Date])) FROM DateList WHERE [Date] < '2012-01-01')
SELECT [Date] FROM DateList
10 май 12, 10:04    [12528330]     Ответить | Цитировать Сообщить модератору
 Re: Получить в запросе последовательность дат  [new]
офигеть
Guest
SomewhereSomehow
Виктор_sql,

declare @s datetime = '20010101', @e datetime = '20120101';
with 
v as(select * from ( values(1),(2),(3),(4),(5) ) v(i)),
nums as (select n = row_number() over (order by(select null))-1 from v v1 cross join v v2 cross join v v3 cross join v v4 cross join v v5)
select dateadd(yy,n,@s) from nums
where n <= datediff(yy,@s,@e)
;


глобально.
нагенерить 3125 строк, чтоб получать последовательно годы, начиная с 2001 и до...(конца света?)?
10 май 12, 10:58    [12528544]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить