Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.21;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
2-1191223741
F@T@L_Err0r
2007-10-01 11:29
2007.10.21
Media player


3-1181908174
well
2007-06-15 15:49
2007.10.21
MS SQL Определение логина пользователя


15-1190556185
Суслик
2007-09-23 18:03
2007.10.21
Функциональные языки


3-1181663169
ssa
2007-06-12 19:46
2007.10.21
Запись JPEG в БД через запрос


2-1190706757
Uchenik
2007-09-25 11:52
2007.10.21
Поведение кнопки TToolButton со стилем tbsDropDown