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

Откуда:
Сообщений: 24
Доброе утро всем!

Возник вопрос, как написать Select, который вывел бы одну колонку, в которой были бы даты из заданного интервала с шагом один день.
Пример. Результат от 01.08 до 06.08

DateColumn
------------------
01.08.2014
02.08.2014
03.08.2014
04.08.2014
05.08.2014
06.08.2014
1 авг 14, 12:39    [16386566]     Ответить | Цитировать Сообщить модератору
 Re: Select Дата от и до  [new]
msLex
Member

Откуда:
Сообщений: 8192
1. Завести таблицу-календарь
2. Заполнить ее данными лет на 30 вперед.
3. Написать к ней простейший запрос.


Первый два пункта единожды для каждого сервера (или базы, в зависимости доступов)
1 авг 14, 12:46    [16386614]     Ответить | Цитировать Сообщить модератору
 Re: Select Дата от и до  [new]
mrGuest
Guest
Интересная задачка :)

Один из множества способов, взять любую таблицу (представление), в которой заведомо достаточно строк и:

declare	@start_date datetime,
	@end_date datetime

select	@start_date = '01/01/2014',
	@end_date = '06/01/2014'

select	top(datediff(day, @start_date, @end_date) + 1)
	dateadd(day, row_number() over(order by [object_id]) - 1, @start_date)
from	sys.objects


Но правильнее конечно календарь-справочник.
1 авг 14, 13:00    [16386706]     Ответить | Цитировать Сообщить модератору
 Re: Select Дата от и до  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
declare @dateb datetime
declare @datee datetime
select @dateb='20140701',@datee='20140715'
;with dates([date]) as (select @dateb
union all
select dateadd(dd,1,[date])
from dates
where [date]<@datee
)select * from dates
1 авг 14, 13:02    [16386719]     Ответить | Цитировать Сообщить модератору
 Re: Select Дата от и до  [new]
mrGuest
Guest
LexusR
declare @dateb datetime
declare @datee datetime
select @dateb='20140701',@datee='20140715'
;with dates([date]) as (select @dateb
union all
select dateadd(dd,1,[date])
from dates
where [date]<@datee
)select * from dates


Для рекурсии есть ограничение, в SQL Server 2005 - 100 уровней
1 авг 14, 13:35    [16387005]     Ответить | Цитировать Сообщить модератору
 Re: Select Дата от и до  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
https://www.sql.ru/forum/1097504/vuha-dlya-kalendarya?hl=?????????
1 авг 14, 13:36    [16387011]     Ответить | Цитировать Сообщить модератору
 Re: Select Дата от и до  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
да нууу
declare @dateb datetime
declare @datee datetime
select @dateb='20110701',@datee='20141015'
;with dates([date]) as (select @dateb
union all
select dateadd(dd,1,[date])
from dates
where [date]<@datee
)select * from dates
OPTION (MAXRECURSION 0);
1 авг 14, 13:36    [16387016]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить