Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
Филиппов Стас   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.005 c
3-39661
Смолин
2002-04-17 12:36
2002.05.13
Как удалить физически


1-39688
sammy
2002-04-28 11:21
2002.05.13
Ошибка в ассемблере


3-39681
Johnmen
2002-04-17 09:54
2002.05.13
Удаление check а


1-39701
ymin
2002-04-29 16:04
2002.05.13
Showmessage(‘Давление должно быть <’ +inttostr(int2*0.8));


14-39837
kosty
2002-04-03 08:16
2002.05.13
база





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский