![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как искать? [D7, WinXP]
msainc © (2006-06-19 14:20:00)Есть база (порядка 500 000 записей) в которой хранятся фамилии людей. Как сделать в программе поиск, без учёта букв Е и Ё. Т. е. если я ввёл фамилию Семёнов - то программа должна выбрать из базы фамилии как Семёнов так и Семенов. То же самое если ввёл Семенов - должна найти как Семенов так и Семёнов. Подскажите пожалуйста.
Desdechado (2006-06-19 15:34:00) [1]СУБД не указана, а жаль
тогда бы ответы были конструктивнее
например, для Оракла можно завести Function-based index, в котором будут только Е без Ё
и искать можно по нему (очень быстро), а хранить - как хочешь
sniknik (2006-06-19 15:07:00) [2]SELECT * FROM TABLE WHERE NAME LIKE 'Сем[е-ё]нов'
хотя, [1] будет наверное быстрее при индексном поиске. (проверить надо, сдесь он тоже может использоваться )
msainc (2006-06-19 14:46:00) [3]вариант хороший но это же не только для Семёнов. Также могут ввести и Королёв и т.п. или вобще фамилию без Ё или Е
ANB (2006-06-19 14:46:00) [4]
> msainc (19.06.06 14:40) [6]
Млин. Заведи еще одно поле, куда клади фамилию с буквой Е вместо Ё. Заодно переведи в верхний регистр. Ищи по этому полю, а возвращай исходное. Проще всего повесить на таблицу триггер, который будет заполнять служебное поле.
Zz_ (2006-06-19 14:44:00) [5]
declare @t table (A varchar(10) collate Cyrillic_General_CI_AS)
insert into @t select 'Семёнов'
union all select 'Семенов'
select * from @t where A = 'Семенов'
select * from @t where A = 'Семёнов'
select * from @t where A = 'Семенов' collate Cyrillic_General_CI_AI
select * from @t where A = 'Семёнов' collate Cyrillic_General_CI_AI
Сергей М. (2006-06-19 14:42:00) [6]Фтопку такую базу
msainc (2006-06-19 14:40:00) [7]Вся эта фигня нужна только для поиска, а выбирать данные он должен такими какими они и были, т.е. Написал Семенов - Получил записи: Семенов, Семёнов и тп. т.е. перебить во всей базе Е на Ё нельзя.
StriderMan (2006-06-19 14:38:00) [8]да, прошурши всю базу, поменяй в ней Е на Ё и будет счастье.
ЗЫ: а Ё отверткой выковыряй из клавы
evvcom (2006-06-19 14:35:00) [9]Дык, а ты в базу пиши уже с "Е"
msainc (2006-06-19 14:33:00) [10]В том то и дело. Если я ввёл Семенов - как программа узнает какую букву Е надо заменить на Ё чтобы получить Семёнов?
Вот в чём вопрос. Были советы привести к нормальному виду - т.е. В введённом тексте заменить все Ё на Е и в базе то же самое и сравнивать, но искать фамилии где встречается Ё а потом их заменять на Е долго. Нет ли других способов?
StriderMan (2006-06-19 14:27:00) [11]а если серьезно то напиши хранимую процедуру, которая в ячейке все Ё на Е преобразует, и используй в запросе только Е
StriderMan (2006-06-19 14:25:00) [12]SELECT * FROM TABLE WHERE (NAME = 'Семёнов') OR (NAME = 'Семeнов')