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

Вниз

Поиск   Найти похожие ветки 

 
Филиппов Стас   (2002-04-13 18:14) [0]

Подскажите пожалуйста как можно произвести следующий поиск.

В БД имеется поле ART

ART
1234
1 23/4
12-34
1.23_4

Как можно введя 1234 в любых вариациях (с/без пробелов и т.п.)
получить все записи.
Другими словами поиск или фильтрация с игнорированием каких либо символов.


 
Anatoly Podgoretsky ©   (2002-04-13 18:16) [1]

Толко сканирование


 
DPetrovich ©   (2002-04-13 19:49) [2]

Возможно можно сделать следующим образом.
Создаём в Delphi функцию, которой в качестве параметра передаётся строка типа "1.23_4"

function TForm1.Strforlike(s1: string): string;
var i,s: integer; str1: string;
set1: set of char;
begin
set1:=["1","2","3","4","5","6","7","8","9","0"];
str1:="%";
for i:=0 to length(s1) do
if s1[i] in set1
then str1:=str1+s1[i]+"%";
result:=str1;
end;

И тогда можно в запросе написать where ART like str2 {=Strforlike(s1)} ...


 
Deniz ©   (2002-04-15 06:30) [3]


> DPetrovich © (13.04.02 19:49)

Так не получится, потому как запрос ... where ART like str2... обработает только str2("1234"), а 12-34 туда не попадет.
Здесь поможет только сканирование, причем я так понимаю что порядок (1234 или 1243) тоже играет роль.


 
Johnmen ©   (2002-04-15 09:32) [4]

SELECT * FROM TBL WHERE FLD LIKE "%1%2%3%4%"


 
Anatoly Podgoretsky ©   (2002-04-15 10:30) [5]

Это вернет м 1234 и 4321 м abc1
хотя это можно использовать как первичное условие, а затем наложить локальный фильтр


 
kalex77   (2002-04-15 10:34) [6]

select * from art
where
art like "%1%"
or
art like "%2%"
or
art like "%3%"
or
art like "%4%"
;


 
Johnmen ©   (2002-04-15 10:40) [7]

>Anatoly Podgoretsky © : Это ты мне ? Если да, то вернет все записи, в которых встречается 1,2,3,4 именно в такой последовательности и разделенные любым количеством любых символов или не разделенные вовсе...


 
Anatoly Podgoretsky ©   (2002-04-15 10:44) [8]

Johnmen © (15.04.02 10:40)
Вообще то тебе, но не буду утверждиать, так как в такой форме не видел запросов, но если ты гарантируешь, что это именно так, вернет только 1234 в данной последовательности и ничего другого то задача решена. Правда мне кажется, что последний % в этом случае ошибка.


 
Johnmen ©   (2002-04-15 11:01) [9]

>Anatoly Podgoretsky © :
Согласен, что запрос действительно чуден.
Но он решает проблему, и можно утверждать, что будут отобраны все записи, в которых типа ...1...2...3...4...
Последний % тоже нужен, ведь за 4 м.б. что-то еще...



 
roottim   (2002-04-15 11:35) [10]

Johnmen © (15.04.02 11:01) прав
% это всеравно что маска!


 
roottim   (2002-04-15 11:38) [11]

+ если вместо % использовать "_" это укажет на 1 произвольный символ, % дает нное кол-ао


 
DPetrovich ©   (2002-04-15 11:53) [12]

По-моему, это всё-таки не совсем то потому как запрос
SELECT * FROM TBL WHERE FLD LIKE "%1%"
выдаст не только номера типа "1_","1." и тд, но и "123" и "12_3"...





 
Johnmen ©   (2002-04-15 12:12) [13]

>DPetrovich © : Конечно ! Но задача ставится ...1...2...3...4...,
а не ...1... !


 
DPetrovich ©   (2002-04-15 12:28) [14]

>Johnmen © (15.04.02 12:12)
Ну если номера только 4-х значные, то да...


 
sniknik ©   (2002-04-15 12:35) [15]

DPetrovich © слушай надоело. вместо демагогии проверь реально.
тот селект что Johnmen © писал работает именно так как в задаче было поставлено! а чего еще надо?


 
DPetrovich ©   (2002-04-15 12:47) [16]

>sniknik © (15.04.02 12:35)
Спасибо за ценный совет!


 
Filippov Stas   (2002-04-17 11:49) [17]

Спасибо, но я видимо не уточнил вопрос.
Записей неограниченное количество и из скольких угодно символов.
Запрос который написал Johnmen © работает, но вазвращает все записи где есть 1234 в том числе и 1 98 2 76 34.
А как можно сделать такой же поиск, но вводимые символы должны идти подряд. Если введено 123, то и в ответе ...123... идут подряд. Но все еже остается требование игнорирования всех символов кроме цифр и букв.

Спасибо.


 
Anatoly Podgoretsky ©   (2002-04-17 14:48) [18]

Возвращайся к предложению
Anatoly Podgoretsky © (13.04.02 18:16)
тем более что другие предложенные не совсем поиск, а фильтрация


 
Filippov Stas   (2002-04-17 15:55) [19]

А не подскажите как работает это сканирование.


 
DPetrovich ©   (2002-04-17 18:37) [20]

Фильтровать можно в обработчике события OnFilterRecord для DataSet"а - в строке для поиска и в значении соответсвующего поля DataSet"а убрать лишние символы и проверить на совпадение...


 
Anatoly Podgoretsky ©   (2002-04-17 18:44) [21]

Result := False;
Table.First;
while not Table.Eof do begin
if анализ then begin
Result :=True;
Exit;
end
else begin
Table.Next;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2002.05.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
3-39660
Sasha L
2002-04-17 13:39
2002.05.13
Совместная работа 2 приложений (уточнение)


1-39686
dkDimon
2002-04-27 00:15
2002.05.13
компоненты в стиле WinXP


6-39815
Dim2511
2002-02-28 18:14
2002.05.13
I need some help


14-39849
vopros
2002-04-04 12:03
2002.05.13
Люди кто нибудь пользовался ипотечным кредитом?


6-39822
AlexRush
2002-02-28 18:14
2002.05.13
WinSock2 API - чтение данных из сокета