Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как вывести все даты в диапазоне?  [new]
Alexey.T
Guest
Одним (желательно) запросом нужно вывести все дни в интервале, например '01.01.2008' to '01.01.2009'. Или как заполнить разово таблицу на 10-летия; буду оттуда дергать?
27 май 09, 12:46    [7233785]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести все даты в диапазоне?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
CTE+iap, Задача №1
27 май 09, 12:48    [7233796]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести все даты в диапазоне?  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Из таблицы-календаря!
27 май 09, 12:49    [7233811]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести все даты в диапазоне?  [new]
Alexey.T
Guest
Sorry
27 май 09, 12:49    [7233813]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести все даты в диапазоне?  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1515
Паганель
CTE+iap, Задача №1
Так как версия сервера не обозначена приведу свой универсальный вариант:
declare @date1 datetimeб @date2 datetime
set @date1='2009-01-08'
set @date2='2009-02-08'

select dateadd(d, number, @date1) from master..spt_values 
where number between 0 and datediff(d, @date1, @date2) and type ='P'
27 май 09, 13:11    [7234029]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести все даты в диапазоне?  [new]
vino
Member

Откуда:
Сообщений: 1191
Sergey Sizov, этот способ годиться на период не более 2048 дней
27 май 09, 14:38    [7234873]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести все даты в диапазоне?  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1515
vino
Sergey Sizov, этот способ годиться на период не более 2048 дней
А пример должен охватывать все возможные варианты? А подумать и подточить напильником никак? Например, еще раз приджойнить spt_values?
27 май 09, 14:42    [7234910]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести все даты в диапазоне?  [new]
vino
Member

Откуда:
Сообщений: 1191
Sergey Sizov, конечно, можно
27 май 09, 15:31    [7235303]     Ответить | Цитировать Сообщить модератору
 Re: Как вывести все даты в диапазоне?  [new]
iljy
Guest
vino,
WITH
  L0 AS (SELECT 0 AS c UNION ALL SELECT 0),
  L1 AS (SELECT 0 AS c FROM L0 AS A CROSS JOIN L0 AS B),
  L2 AS (SELECT 0 AS c FROM L1 AS A CROSS JOIN L1 AS B),
  L3 AS (SELECT 0 AS c FROM L2 AS A CROSS JOIN L2 AS B),
  L4 AS (SELECT 0 AS c FROM L3 AS A CROSS JOIN L3 AS B),
  L5 AS (SELECT 0 AS c FROM L4 AS A CROSS JOIN L4 AS B),
  Nums AS (SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 0)) AS n FROM L5)

SELECT n INTO dbo.T1 FROM Nums WHERE n <= 1000000
красивое на мой взгляд решение:) взято тут
27 май 09, 16:44    [7235890]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить