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

каждый год надо делать выборку between '20090101' and '20090630'

делаю так

Where Invoicedate 
between
ltrim(str(year(getdate())))+'0101' and ltrim(str(year(getdate())))+'0630'

есть лучше (быстрее) варианты?

Большое спасибо
26 май 09, 11:33    [7227291]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
алекс.ей
sql2000, есть большая таблица с полем типа datetime

каждый год надо делать выборку between '20090101' and '20090630'

делаю так

Where Invoicedate 
between
ltrim(str(year(getdate())))+'0101' and ltrim(str(year(getdate())))+'0630'

есть лучше (быстрее) варианты?

Большое спасибо

Есть, использовать нормально тип DateTime или Date если у Вас 2008-й.
26 май 09, 11:43    [7227385]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
алекс.ей
sql2000

Сори, не заметил :(
26 май 09, 11:44    [7227392]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
Crimean
Member

Откуда:
Сообщений: 13148
да масса вариантов!
вьюву сделать готовую, которая от getdate() сразу работает :)
функцию табличную инлайновую сделать с параметром "дата"
функцию скалярную сделать, которая возвращает по дате начало и конец года для between (с 2 параметрами, дата и чо от нее надо) и в between ее ставить
...
26 май 09, 11:51    [7227450]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
алекс.ей
Guest
а чем ltrim(str(year(getdate())))+'0101' хуже?
26 май 09, 11:54    [7227474]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
алекс.ей
Guest
или лучше объявлять две переменные через declare типа datetime и потом их использовать?

этот запрос часть большого селекта, который достаточно серьезно тормозит. поэтому хочется все улучшить и сделать правильно
26 май 09, 11:58    [7227505]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
алекс.ей
sql2000, есть большая таблица с полем типа datetime

каждый год надо делать выборку between '20090101' and '20090630'

делаю так

Where Invoicedate 
between
ltrim(str(year(getdate())))+'0101' and ltrim(str(year(getdate())))+'0630'

есть лучше (быстрее) варианты?

Большое спасибо
А зачем LTRIM? И лучше не применять BETWEEN, если в поле может быть ненулевое время.
WHERE Invoicedate>=STR(YEAR(GETDATE())) AND Invoicedate<STR(YEAR(GETDATE()))+'0631'
26 май 09, 12:13    [7227621]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
iljy
Guest
сколько дней в июне ?
26 май 09, 12:20    [7227683]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
алекс.ей
или лучше объявлять две переменные через declare типа datetime и потом их использовать?
Это очень желательно, хотя, IMHO, не критично.
26 май 09, 12:20    [7227688]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iljy
сколько дней в июне ?
Ой!
WHERE Invoicedate>=STR(YEAR(GETDATE())) AND Invoicedate<STR(YEAR(GETDATE()))+'0701'
26 май 09, 12:22    [7227699]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
Saller
Member

Откуда: exUSSR
Сообщений: 1141
iljy
сколько дней в июне ?

Прибавить месяц и отнять текущую дату +1 и будет последний день предыдущего месяца.
26 май 09, 12:24    [7227716]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
алекс.ей
Guest
iap, "ненулевое" или нулевое?

в таблице объявлено Invoicedate(datetime, NULL), но практически NULL там быть не может т.к. вся логика работы приложения строится именно на датах (планирование). NULL видимо объявлен "просто так", это таблица куда сливаются данные из разных баз (делал не я, пишу что вижу)
26 май 09, 12:24    [7227717]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
алекс.ей
iap, "ненулевое" или нулевое?

в таблице объявлено Invoicedate(datetime, NULL), но практически NULL там быть не может т.к. вся логика работы приложения строится именно на датах (планирование). NULL видимо объявлен "просто так", это таблица куда сливаются данные из разных баз (делал не я, пишу что вижу)
Я имел в виду возможность вот такого значения в поле Invoicedate:
'20090630 15:34:55'
Как видите, эта дата больше, чем '20060630', но всё ещё принадлежит 30-му июня.
26 май 09, 12:34    [7227813]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Что-то я много опечаиываться стал. Извините!
iap
алекс.ей
iap, "ненулевое" или нулевое?

в таблице объявлено Invoicedate(datetime, NULL), но практически NULL там быть не может т.к. вся логика работы приложения строится именно на датах (планирование). NULL видимо объявлен "просто так", это таблица куда сливаются данные из разных баз (делал не я, пишу что вижу)
Я имел в виду возможность вот такого значения в поле Invoicedate:
'20090630 15:34:55'
Как видите, эта дата больше, чем '20090630', но всё ещё принадлежит 30-му июня.
26 май 09, 12:37    [7227835]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
алекс.ей
Guest
понял, спасибо.
26 май 09, 12:45    [7227899]     Ответить | Цитировать Сообщить модератору
 Re: Поиск по дате  [new]
Uridian
Member

Откуда: Lobnya
Сообщений: 211
Создать в таблице (избыточное) строковое или целочисленное поле со значениями "20090101", "20090102", и построить по нему индекс
26 май 09, 12:51    [7227963]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить