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

Откуда: Украина г. Хмельницкий
Сообщений: 628
Есть период из двух дат:
DECLARE @DAT1 VARCHAR(8), @DAT2 VARCHAR(8)
SET @DAT1 = '20150101'
SET @DAT2 = '20150205'

нужно в цикле пройтись по дням периода. Приходит на ум только вариант создания таблички-календаря, в которой будут занесены все дни, например с 1901 по 2099 гг. Если этот вариант имеет здравый смысл, то как заполнить такую табличку, в ручную? Или есть другие варианты решения? Большое спасибо!
5 фев 15, 12:27    [17221667]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
Glory
Member

Откуда:
Сообщений: 104760
shanton
нужно в цикле пройтись по дням периода.

Ну так напишите такой цикл

shanton
то как заполнить такую табличку, в ручную?

Циклом, одним запросом - какая разница для одноразовой задачи ?
5 фев 15, 12:31    [17221702]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Задача не одноразовая. @DAT1 VARCHAR(8) и @DAT2 VARCHAR(8) это параметры ХП:
ALTER PROCEDURE [dbo].[Fakt_pris_1C]
	@DAT1 VARCHAR(8),
	@DAT2 VARCHAR(8)

тоесть период может быть какой угодно.
5 фев 15, 12:40    [17221789]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
o-o
Guest
shanton,
циклом так циклом:
DECLARE @DAT1 VARCHAR(8), @DAT2 VARCHAR(8)
SET @DAT1 = '20150101'
SET @DAT2 = '20150205'

declare @i int = 0;
while DATEADD(DAY, @i, @DAT1) <= @DAT2
begin
   select @i, DATEADD(DAY, @i, @DAT1);
   set @i = @i + 1;
end;

...поди совсем и не цикл надо ТС...
5 фев 15, 12:41    [17221797]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
Glory
Member

Откуда:
Сообщений: 104760
shanton
Задача не одноразовая. @DAT1 VARCHAR(8) и @DAT2 VARCHAR(8) это параметры ХП:

Т.е. вы хотите при каждом выполнении создавать таблицу-календарь ?
5 фев 15, 12:41    [17221802]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Glory
Циклом, одним запросом - какая разница для одноразовой задачи ?

Цикл или запрос - разницы нет никакой.
5 фев 15, 12:43    [17221828]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Glory
Т.е. вы хотите при каждом выполнении создавать таблицу-календарь ?

Нет, зачем? Таблицу создать один раз на постаянной основе, а в процедуре её использовать.
5 фев 15, 12:45    [17221847]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
Glory
Member

Откуда:
Сообщений: 104760
shanton
Glory
Циклом, одним запросом - какая разница для одноразовой задачи ?

Цикл или запрос - разницы нет никакой.

Для одноразовой задачи создания таблицы календаря на 100 лет вперед - никакой
5 фев 15, 12:46    [17221851]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
Glory
Member

Откуда:
Сообщений: 104760
shanton
Glory
Т.е. вы хотите при каждом выполнении создавать таблицу-календарь ?

Нет, зачем? Таблицу создать один раз на постаянной основе, а в процедуре её использовать.

И какая разница, что будет написано в скрите заполнения этой таблицы ?
Если скрипт будт выполнен 1 раз
5 фев 15, 12:47    [17221863]     Ответить | Цитировать Сообщить модератору
 Re: Пройтись по датам периода  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
[quot o-o]shanton,
циклом так циклом:
DECLARE @DAT1 VARCHAR(8), @DAT2 VARCHAR(8)
SET @DAT1 = '20150101'
SET @DAT2 = '20150205'

declare @i int
SET @i = 0
while DATEADD(DAY, @i, @DAT1) <= @DAT2
begin
   select @i, DATEADD(DAY, @i, @DAT1)
   set @i = @i + 1
end

Спасибо! Ваш вариант работает. И таблицы с датами не надо.
5 фев 15, 12:51    [17221912]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить