![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поис (без учитывания знаков и символов) [D7, MSSQL]
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 ...
но нельзя ли как-то формализовать данные, наверняка там какая-то логика есть?