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