![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SQL запрос с использованием LIKE [D7, MSSQL]
mefodiy © (2007-06-18 12:01:00)Есть запрос вида
SELECT * FROM <table_name> WHERE
(<field_name> LIKE 'шаблон_1') OR
(<field_name> LIKE 'шаблон_2') OR
..............................................
(<field_name> LIKE 'шаблон_N')
Поле одно и то же (field_name), но шаблоны разные (шаблон_1, шаблон_2 и т.д.)
Запрос нормально работает, но код как-то не нравится.
Можно ли написать более компактный код?
Спасибо.
White Barsik (2007-06-19 10:06:00) [1]
> нужно неточное вхождение
тогда ">" и "<", или ">=" и "<="
Anatoly Podgoretsky (2007-06-18 20:36:00) [2]Не поле нужно, а таблица шаблонов, но только IN не подойдет, нужно неточное вхождение
AlexWlad (2007-06-18 19:38:00) [3]Весьма медленное решение (LIKE и тем более OR). Я бы завел дополнительное числовоеполе для номера счета (заполняется триггером), а дальше использовал конструкцию WHERE <field_name> IN (...,...,...). Быстрее не то, что в разы, в сотни раз.
sniknik (2007-06-18 17:57:00) [4]> 20,21,23,29,30,36,44.
SELECT * FROM <table_name> WHERE
(<field_name> LIKE '2[0139].%') OR
(<field_name> LIKE '3[06].%') OR
(<field_name> LIKE '44.%')
mefodiy (2007-06-18 17:28:00) [5]Дело в том, что первая и вторая цифры счетов могут быть разные. Может быть, например, такой набор счетов:
20,21,23,29,30,36,44.
База данных MSSQL и
SELECT * FROM <table_name> WHERE
<field_name> LIKE '1[056].%'
здесь работает.
sniknik (2007-06-18 14:58:00) [6]> если эта база умеет работать с regexp
> то можно примерно так:
для mssql так
SELECT * FROM <table_name> WHERE
<field_name> LIKE '1[056].%'
mysql (2007-06-18 14:06:00) [7]только вот с кириллицей непонятки если использовать regexp,
попробуй, впрочем если поле только числовое, то думаю проблем не будет
mysql (2007-06-18 14:04:00) [8]если эта база умеет работать с regexp
то можно примерно так:
SELECT * FROM <table_name> WHERE
(<field_name> REGEXP '^1[056]\\\.*')
Johnmen (2007-06-18 13:28:00) [9]
> Можно ли написать более компактный код?
Нет.
mefodiy (2007-06-18 13:02:00) [10]В том то и дело, что другие есть, и '1_.%' не подходит.
Desdechado (2007-06-18 12:13:00) [11]mefodiy (18.06.07 12:07) [3]
Если в первом десятке других нет, то '1_.%'
mefodiy (2007-06-18 12:10:00) [12]>Reindeer Moss Eater ©
Что-то типа
(<field_name> LIKE ('шаблон_1') OR
('шаблон_2') OR
..............................................
('шаблон_N')
mefodiy (2007-06-18 12:07:00) [13]Уточняю задачу.
Из таблицы надо выбрать определенные номера счетов.
Вот пример:
шаблон_1 = '10.%',
шаблон_2 = '15.%,'
шаблон_3 = '16.%,'
Reindeer Moss Eater (2007-06-18 12:04:00) [14]но код как-то не нравится.
чем именно?
Desdechado (2007-06-18 12:02:00) [15]Если шаблон универсализовать, то можно.