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

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

MS SQL Server 2005

Кто может подсказать - как можно изящно выбрать данные за период.
Период вот как описан: начало периода, например сентябрь 2012
окончание периода, например - февраль 2013
То есть по умолчанию - начало периода - это первое число месяца, а окончание периода - последнее число месяца. То есть, по сути, надо сравнить период по частям даты, в которых нет числа, а есть только месяц и год. Вбивать недостающие части даты и применять BetWeen - это как бы вариант, но думаю, есть более правильный вариант?
применение типа (Month(Date)>=x1 AND Year(Date)>=Y1) AND Month(Date) <=x2 AND Year(Date)<=Y2 - не прокатит, так как это сравнение не дат а целых чисел, а как без гемора и говнокода можно сравнить период, где по умолчанию только [месяц1 год1].....[месяц2 год2]?

Заранее спасибо!
11 мар 13, 11:53    [14034321]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
https://www.sql.ru/faq/faq_topic.aspx?fid=115
11 мар 13, 11:55    [14034332]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/faq/faq_topic.aspx?fid=115
11 мар 13, 11:56    [14034336]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
Galadriel75
Member

Откуда:
Сообщений: 1324
Спасибо! смотрю!
11 мар 13, 12:02    [14034390]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
DECLARE @From VARCHAR(20)='сентябрь 2012', @To VARCHAR(20)='февраль 2013';

SET LANGUAGE русский;
SELECT * FROM T WHERE [Date]>=@From AND [Date]<DATEADD(MONTH,1,@To);
Этот способ, к сожалению, зависит от языка...
11 мар 13, 12:11    [14034452]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
Galadriel75
Member

Откуда:
Сообщений: 1324
iap
DECLARE @From VARCHAR(20)='сентябрь 2012', @To VARCHAR(20)='февраль 2013';

SET LANGUAGE русский;
SELECT * FROM T WHERE [Date]>=@From AND [Date]<DATEADD(MONTH,1,@To);
Этот способ, к сожалению, зависит от языка...


тоже идея - пробую!
спасибо!!!
11 мар 13, 12:16    [14034518]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Galadriel75
iap
DECLARE @From VARCHAR(20)='сентябрь 2012', @To VARCHAR(20)='февраль 2013';

SET LANGUAGE русский;
SELECT * FROM T WHERE [Date]>=@From AND [Date]<DATEADD(MONTH,1,@To);
Этот способ, к сожалению, зависит от языка...


тоже идея - пробую!
спасибо!!!
Лучше бы написали, в каком точно виде заданы параметры.
Лучше всего, всё-таки, если в числовом виде.
11 мар 13, 12:25    [14034607]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
Galadriel75
Member

Откуда:
Сообщений: 1324
iap
Galadriel75
пропущено...


тоже идея - пробую!
спасибо!!!
Лучше бы написали, в каком точно виде заданы параметры.
Лучше всего, всё-таки, если в числовом виде.

в процедуру (Delphi), в которой запрос делается, передаются начальный месяц и год и конечный месяц и год

пока решил чтоб не запариваться, прям в Delphi даты ваять:

FUNCTION MonthYearToDate(Month,Year:Word;Last:Boolean = False):AnsiString;
var
   Date:TDateTime;
begin
    Date := EncodeDate(Year,Month,1);
    if Last then Result := MQuotedStr(DateToStr(EncodeDate(Year,Month,DaysInMonth(Date))))
    else Result := MQuotedStr(DateToStr(Date));
end;	

а потом эти получившиеся строковые даты всобачивать в запрос - хоть через Ж, зато будет работать :)
а пока суть да дело, может узнаю что-нить полезное как это грамотно делается...
11 мар 13, 12:46    [14034755]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Galadriel75
iap
пропущено...
Лучше бы написали, в каком точно виде заданы параметры.
Лучше всего, всё-таки, если в числовом виде.

в процедуру (Delphi), в которой запрос делается, передаются начальный месяц и год и конечный месяц и год

пока решил чтоб не запариваться, прям в Delphi даты ваять:

FUNCTION MonthYearToDate(Month,Year:Word;Last:Boolean = False):AnsiString;
var
   Date:TDateTime;
begin
    Date := EncodeDate(Year,Month,1);
    if Last then Result := MQuotedStr(DateToStr(EncodeDate(Year,Month,DaysInMonth(Date))))
    else Result := MQuotedStr(DateToStr(Date));
end;	

а потом эти получившиеся строковые даты всобачивать в запрос - хоть через Ж, зато будет работать :)
а пока суть да дело, может узнаю что-нить полезное как это грамотно делается...
На сервер даты лучше передавать в виде 'YYYYMM01'.
И проблем не будет. К дате конца периода на сервере останется добавить 1 месяц.
Полная независимость от настроек сервера, языка коннекта и т.п.
11 мар 13, 12:52    [14034801]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
Galadriel75
Member

Откуда:
Сообщений: 1324
iap
Galadriel75
пропущено...

в процедуру (Delphi), в которой запрос делается, передаются начальный месяц и год и конечный месяц и год

пока решил чтоб не запариваться, прям в Delphi даты ваять:

FUNCTION MonthYearToDate(Month,Year:Word;Last:Boolean = False):AnsiString;
var
   Date:TDateTime;
begin
    Date := EncodeDate(Year,Month,1);
    if Last then Result := MQuotedStr(DateToStr(EncodeDate(Year,Month,DaysInMonth(Date))))
    else Result := MQuotedStr(DateToStr(Date));
end;	

а потом эти получившиеся строковые даты всобачивать в запрос - хоть через Ж, зато будет работать :)
а пока суть да дело, может узнаю что-нить полезное как это грамотно делается...
На сервер даты лучше передавать в виде 'YYYYMM01'.
И проблем не будет. К дате конца периода на сервере останется добавить 1 месяц.
Полная независимость от настроек сервера, языка коннекта и т.п.


Пожалуй - это вариант! спасибо!!!
11 мар 13, 13:58    [14035232]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2005 выборка за период  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Galadriel75
iap
пропущено...
На сервер даты лучше передавать в виде 'YYYYMM01'.
И проблем не будет. К дате конца периода на сервере останется добавить 1 месяц.
Полная независимость от настроек сервера, языка коннекта и т.п.


Пожалуй - это вариант! спасибо!!!
Или вообще передавать в параметре типа DATETIME первое число месяца, а не саму дату.
11 мар 13, 14:02    [14035271]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить