Главная страница
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.026 c
4-1176893124
Иван16
2007-04-18 14:45
2007.10.21
Перехват вызова модального окна


3-1181655989
Лёля
2007-06-12 17:46
2007.10.21
Midas Insufficient memory for this operation


2-1190817616
Vitek2
2007-09-26 18:40
2007.10.21
Помогите с TabControl!


15-1190705543
Неместный
2007-09-25 11:32
2007.10.21
Delphi 7 SE и ODAC 6.10


6-1172175913
NikOracul
2007-02-22 23:25
2007.10.21
Как программно создать модемное соединение с интернетом?