Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поис (без учитывания знаков и символов) [D7, MSSQL]


Страницы:   1 2 3

Jeeb ©   (2007-04-13 12:02:00) 

Здравствуйте!
Прошу помочь мне.

Есть Edit, в который вводится значение для поиска в базе. Вводится пользователем в таком виде: AU044093FR.
В то время как в базе значения введены в виде: AU04-409-3FR, причем может быть и другое расположение дефисов (точек, запятых и пр.).

Соответственно, если пользователь вводит без дефисов, то информация отсутствует, нужно, чтобы программа не учитывала различные знаки во время поиска по базе, а учитывала только буквы и цифры.

Заранее благодарен за помощь.


Jeeb   (2007-04-13 12:52:00) [41]

Jan1,
надо учитывать все случаи, а не только случаи с /,-. и пр...

Т.е. надо формировать что-то вроде [1], но учитывая и то, что дефисы могут присутствовать...


ЮЮ   (2007-04-13 12:52:00) [42]

[15] Jeeb   (13.04.07 12:48)
в [1] как раз учитываются только буквы и цифры.
Попробуй, наконец, запрос на своей БД :)


Jeeb   (2007-04-13 12:48:00) [43]

С другой стороны, наверное [1] было бы не очено корректно, т.к. пользователь может ввести идентификатор и с символами и без... Это как раз и вводит в заблуждение... Он так же может ввести один дефис правильно, а про второй забыть... Т.е. при поиске надо учитывать только буквы и цифры....


Jan1   (2007-04-13 12:48:00) [44]

select *
from (select 'A-11-22' as f
union all
select 'A1122' as f
union all
select 'A/11,22' as f
union all
select '/,' as f) q
where f like '%[a-z0-9]%'


ЮЮ   (2007-04-13 12:45:00) [45]

> Тоже думал над этим, но как это сделать?...

Строку, введенную пользователем "удлинить" в два раза, вставив '%' после каждого символа. Полученную строку использовать в запросе


ЮЮ   (2007-04-13 12:39:00) [46]

[9] Jeeb   (13.04.07 12:33)
Я и не предлагал править оригинальные значения, а использовать второе. Теперь и этого не предлагаю, ибо с запросом в [1] MS SQL, надеюсь, справится быстро.


Jeeb   (2007-04-13 12:36:00) [47]

Сергей М.,
я понимаю, что они построены по шаблону, но так же есть запчасти для ВАЗ, УАЗ, Газель, и т.д. Русские - не все настолько педантичны, как немцы... Если бы в базе были только з/ч для Audi, то можно было бы так поступить, но увы.... задавать свой шаблон для каждой марки....


Сергей М.   (2007-04-13 12:33:00) [48]


> Jeeb


Вообще-то немцы, как известно, народ педантичный.

И, если не ошибаюсь, ориг.коды запчастей для Ауди (и не только для этой ТМ) построены по строго определенному шаблону,  которого и следует придерживаться при построении запроса в части условий отбора.


Jeeb   (2007-04-13 12:33:00) [49]

ЮЮ,
пойми, это - оригинальные шифры запчасти, если их править, то это будет неправильным...


ЮЮ   (2007-04-13 12:31:00) [50]

>LIKE 'A%U%0%4%4%0%9%3%F%R'
 Красиво и смело !

Не править же около 5-6000 названий.... Вот...
Можно былобы и поправить, не руками же :) Однако есть [1]


Jeeb   (2007-04-13 12:25:00) [51]

Johnmen,
я бы с привеликим удовольствием сделал это молча, но, увы, не знаю как.... Подскажи, пожалуйста, если не сложно....


Jeeb   (2007-04-13 12:23:00) [52]

ЮЮ,
изначально в базу были введены значения по уникальному (оригинальному) коду запчасти для автомобиля. Нужно теперь при осуществлении поиска не учитывать знаки.... Не править же около 5-6000 названий.... Вот...


Johnmen   (2007-04-13 12:23:00) [53]


>  как это сделать?...

Что значит "как"? Молча. Или тихо напевая себе под нос...:)


Jeeb   (2007-04-13 12:21:00) [54]

clickmaker,
логика есть: AU - Audi, а дальше циферки номера, но как в них происходит расстановка дефисов, я не знаю...

Есть FO10-302-1, а есть просто 16243...

Johnmen,
Тоже думал над этим, но как это сделать?...


ЮЮ   (2007-04-13 12:18:00) [55]

Только
 WHERE (Field LIKE 'A%') AND (Field LIKE '%U%') AND ... AND (Field LIKE '%R')

P.S. Даже учитывая, что будет долго работать, вернёт больше, чем нужно, например 'A0U09344FR'.
P.S.S если дефисы так важны, почему бв пользователю их не вводить при поиске? А если так не важны, зачем их хранить в базе? На худой конец, сделать два поле, в одно пользователь вводит AU04-409-3FR, в другое клиент (а лучше сервер в триггере) пишет AU044093FR, по которому, собственно, потом и искать.


Johnmen   (2007-04-13 12:11:00) [56]

LIKE 'A%U%0%4%4%0%9%3%F%R'


clickmaker   (2007-04-13 12:11:00) [57]

хм...
ну как вариант
select * from Table
where replace(Field, '-', '') = SearchString or replace(Field, ',', '') = SearchString or ...

но нельзя ли как-то формализовать данные, наверняка там какая-то логика есть?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо