Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как задать диапазон в SQL? [MSSQL]


Behemoth ©   (2003-10-20 10:52:00) 

Простите за глупый вопрос, но как правильнее написать на синтаксисе SQL нечто типа:
select * from table where Field in (50,70..95,100..160,200..500)


Anatoly Podgoretsky   (2003-10-20 11:47:00) [1]

Я к тому, что предикат IN оперирует костантным множеством, где элементы разделеных запятыми

The set of comparison values may be either static using a comma-separated list of literals or dynamic using the result set from a subquery

Не знаю, возможно MSSQL и отходит от стандарта, но весьма сомневаюсь.


Behemoth   (2003-10-20 11:39:00) [2]

to Anatoly Podgoretsky:
к чему ты это.... есть возможность переменной присвоить множество?


Anatoly Podgoretsky   (2003-10-20 11:25:00) [3]

Это не диапазон, а множество "set of comparison values"


MOA   (2003-10-20 11:21:00) [4]

Если есть возможность, можно завести временную таблицу, примерно так
DECLARE @Tmp_tab TABLE(
StartVal Integer,
EndVal Integer NULL
... - поле для критериев отбора диапазонов - ведь как-то Вы решаете, какие диапазоны включить для итерации
)
Затем заполнить её, и

select * from table INNER JOIN @Tmp_tab ON (Field >=StarVal) AND ((Field <=EndVal) OR EndVal IS NULL) AND .... - условия для отбора из @Tmp_tab

Кстати, получится быстрее, чем с IN
Удачи!


Alex_Bredin   (2003-10-20 11:17:00) [5]

формируй динамически условие запроса
что-то типа query.SQL.add("or (exp1 between "+inttostr(x1)+" and "+inttostr(x2)+")");итп


Behemoth   (2003-10-20 11:17:00) [6]

to Romkin: продолжи свою мысль...
to Семен Сорокин: придется если не найдется более красивого решения


Romkin   (2003-10-20 11:13:00) [7]

Думаю, возможно через временную таблицу, есть же in (select ...)


Семен Сорокин   (2003-10-20 11:13:00) [8]

Этот запрос идет в цикле, и каждый раз там разное количество диапазонов, поэтому через between писать умучаешся (ужасно некрасиво получится), а через точки не проходит. Может есть другой путь?
динамически строй запрос в зависимости от диапазонов.


Behemoth   (2003-10-20 11:07:00) [9]

Проблема с диапазонами...
Этот запрос идет в цикле, и каждый раз там разное количество диапазонов, поэтому через between писать умучаешся (ужасно некрасиво получится), а через точки не проходит. Может есть другой путь?


bushmen   (2003-10-20 10:58:00) [10]

Так и правильно, через запятую.


Alex_Bredin   (2003-10-20 10:58:00) [11]

+ between для диапазонов


Alex_Bredin   (2003-10-20 10:57:00) [12]

так и пиши


Наверх

Титульная страница Поиск, карта сайта Написать письмо