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

Откуда:
Сообщений: 25
Добрый день.
Можно ли осуществить выборку всех дней месяца в запросе, не используя хранимые процедуры?
В итоге хотел бы получить такой список:


01.01.2009
02.01.2009
03.01.2009
.....
31.01.2009

спасибо.
9 ноя 09, 14:17    [7901843]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
Glory
Member

Откуда:
Сообщений: 104760
Сделайте таблицу-календарь и выбирайте сколь душе угодно
Можно и табличную функцию написать
Или даже запрос
Если не волнует скорость
9 ноя 09, 14:25    [7901910]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
Glory,

спасибо за советы, но интересен вариант без сторонней помощи, т.е. все в одном запросе:)
9 ноя 09, 14:28    [7901930]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
Glory
Member

Откуда:
Сообщений: 104760
HardCore_Solder
Glory,

спасибо за советы, но интересен вариант без сторонней помощи, т.е. все в одном запросе:)

Ну чего уж проще получить через декартово произведение нужную последовтельность чисел от 1 до N. И преобразовать их потом в даты
9 ноя 09, 14:29    [7901953]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
Glory,

спасибо, буду капать в этом направлении
9 ноя 09, 14:36    [7902020]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
А нужно ли декартово произведение, чтобы получить числа от 1 до 31?
SQL2008
DECLARE @D DATE=CURRENT_TIMESTAMP;
SELECT DATEADD(DAY,D-1, DATEADD(MONTH, DATEDIFF(MONTH,0,@D),0)) [Date]
FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20),(21),(22),(23),(24),(25),(26),(27),(28),(29),(30),(31))T(D)
WHERE MONTH(@D)=MONTH(DATEADD(DAY,D-1, DATEADD(MONTH, DATEDIFF(MONTH,0,@D),0)))
ORDER BY 1;
9 ноя 09, 14:41    [7902066]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
novise
Member

Откуда: Москва
Сообщений: 84
HardCore_Solder,
with cte (date)
as
(
select convert(datetime,'01.01.2009',104)
union all
select dateadd(hh,1,date) from cte
where date<convert(datetime,'01.02.2009',104)
)

select * from cte
OPTION (MAXRECURSION 10000);

Здесь, правда, по часам и для 2005.
9 ноя 09, 14:44    [7902103]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
novise,

спасибо, огромное, то что нужно!
9 ноя 09, 14:54    [7902222]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
Esu
Member

Откуда: Киев
Сообщений: 154
не хотел бы я с такими решеняими где-то в проекте встретиться )

откуда вообще мания все делать одним запросом появилась? Непонятно ведь потом нифига и по скорости разработки и выполнения как правило хуже.
9 ноя 09, 14:55    [7902229]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
novise
HardCore_Solder,
with cte (date)
as
(
select convert(datetime,'01.01.2009',104)
union all
select dateadd(hh,1,date) from cte
where date<convert(datetime,'01.02.2009',104)
)

select * from cte
OPTION (MAXRECURSION 10000);

Здесь, правда, по часам и для 2005.
По-Вашему, 1-е февраля принадлежит январю? Оригинально!
9 ноя 09, 14:58    [7902276]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
HardCore_Solder
Member

Откуда:
Сообщений: 25
iap,

не суть, главное показали метод решения)
9 ноя 09, 15:05    [7902362]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
novise
Member

Откуда: Москва
Сообщений: 84
iap,
iap
По-Вашему, 1-е февраля принадлежит январю? Оригинально!

А если обратить внимание на условия выборки?
9 ноя 09, 16:44    [7903359]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
iljy
Member

Откуда:
Сообщений: 8711
novise
iap,
iap
По-Вашему, 1-е февраля принадлежит январю? Оригинально!

А если обратить внимание на условия выборки?

вот и обратите ;) а заодно на результат выполнения
9 ноя 09, 16:46    [7903371]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на выборку всех дней месяца  [new]
novise
Member

Откуда: Москва
Сообщений: 84
iljy,

А ведь и правда, недоглядел.
9 ноя 09, 17:47    [7903867]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить