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

Откуда:
Сообщений: 2083
Всем доброго дня! Заказчик хочет одну вещь, которую вкратце можно описать так: зная год и номер квартала, нужно определит последний день этого квартала.
Пока решил так
declare @yy char(4), @qq int
select @yy = '2011', @qq = 4
select dateadd(qq, 1+datediff(qq, 0, @yy + right('0'+cast(@qq*3 as varchar(2)),2) +'01'), 0)-1 [последний день квартала]

Вроде верно, но уверен есть более изящное решение...
28 авг 12, 16:03    [13077178]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по дате. Квартал.  [new]
user89
Member

Откуда:
Сообщений: 2083
Ой, чисто случайно нашел
declare @yy char(4), @qq int
select @yy = '2012', @qq = 2
select dateadd(qq, @qq, @yy+'0101')-1 [последний день квартала]
28 авг 12, 16:08    [13077214]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по дате. Квартал.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
user89
Ой, чисто случайно нашел
declare @yy char(4), @qq int
select @yy = '2012', @qq = 2
select dateadd(qq, @qq, @yy+'0101')-1 [последний день квартала]
'0101' - лишнее!
declare @yy char(4), @qq int
select @yy = '2012', @qq = 2
select dateadd(d,-1,dateadd(q, @qq, @yy));
28 авг 12, 16:16    [13077279]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по дате. Квартал.  [new]
user89
Member

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

точно! Спасибо!

З.Ы. Ваша статья по датам очень хорошая, держу у себя локально.
28 авг 12, 16:23    [13077339]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по дате. Квартал.  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
не прокатит для @yy = 9999, @qq = 4
^__^
28 авг 12, 16:35    [13077462]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по дате. Квартал.  [new]
Зайцев Фёдор
Member

Откуда: Лужки
Сообщений: 5308
что-то типа такого

declare
  @yy varchar(4) = '9999',
  @qq int = 4;

select dt = convert(datetime, @yy + case @qq when 1 then '0331' when 2 then '0630' when 3 then '0930' when 4 then '1231' end, 112)
28 авг 12, 16:41    [13077512]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить