Другие языки программирования и технологии

Как в SQL найти запись по вхождению в заданное поле некоторого фрагмента текста?

Например в таблице Сотрудники есть поле ФИО и надо найти всех, например, Александров (без игнорирования регистра и т.п. - просто по фхождению текста).
Олег Сафонов
Олег Сафонов
50 492
ЛИКЕ "%АЛЕКСАНДР%"

лике латинскими буквами конечно

более сложный матчинг уже зависит от конкретной бд

особо придирчивым ну можно ЛИКЕ "АЛЕКСАНДР%". ясен пень что в одном поле это, по большому, счету херово конечно
NW
Next Wwxxww
718
Лучший ответ
А куле ж ты не в 3 поля пишешь? Ты не только всех Александров найдешь так, но и всех Алесандровых и Александровичей. В общем, налицо ошибка проектирования БД.
PV
Parviz Veliyev
53 654
Олег Сафонов Это тока пример, у меня там на самом деле гуиды )
правильно говорит Jurijus Zaksas
создавая базу надо прежде всего думать как база будет использоваться, а не как вам проще таблицы стряпать.. .
а вот было бы у вас ФИО по полям разбито, то и проиндексировать можно было бы, и искалось бы шустрее.. . потому как показанному в другом ответе варианту LIKE "%АЛЕКСАНДР%" никакой индекс не поможет)))
Использование LIKE настоятельно не рекомендую, ибо нагрузка не сервер нереальная. Юзай MATCH AGAINST. Синтаксис:

SELECT * FROM table WHERE field MATCH AGAINST 'критерий_поиска'.

Например, криетрием может быть +ответы +майл - тогда найдет все записи, содержащие оба этих слова. Ну и т. д. , правила можно найти в Нете.

PS Поле, по которому ведется поиск типа MATCH AGAINST, должно быть проиндексировано :) Т. е. там должен стоять INDEX

PPS И таки да, если ФИО в одном поле - это просто ппц! Так нельзя делать. Здесь никакой MATCH AGAINST не поможет :(
Furqat Karimov
Furqat Karimov
8 592