Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Создание поискового SQL запроса


Автор: PaWeLL 4.12.2009, 17:46
Необходимо организовать поиск по таблице сотрудников по поле фамилия. Причем искать должно не только по полной фамилии, но и по её части.

Запрос такой:

Код

Select filelds from workers where Surname like '+#39+'%'+a+'%'+#39+'


а - содержимое поля для поиска.

Запрос работает но не полностью. Он выводит результат только если запрашиваемая фамилия введена полностью и с большой буквы. Если ввести часть фамилии или с маленькой буквы, то результат пустой.

Подскажите пожалуйста правильный запрос.

Автор: jcyber 4.12.2009, 17:56
Реализация на SQL зависил от БД.
Но логика такая, что нужно передавать строку "а" состоящая только из строчных букв, а поле таблицы, по которой происходит поиск нужно тоже перевести в нижний регистр.

Автор: ТоляМБА 4.12.2009, 17:57
PaWeLL, начни с приведения к одному регистру:
в коде делфи вместо 'a' напиши AnsiUpperCase(a)
в SQL коде вместо where Surname like напиши where Upper(Surname) like
ты не указал СУБД посему в SQL коде может быть написана другая ф-ия, но в её названии скорее всего будет фигурировать слово Upper.

ЗЫ. Можно конечно и к Lower - на вкус и цвет как говорится... лишь бы регистры били одинаковые.

Автор: PaWeLL 4.12.2009, 18:49
Спасибо. Поиск заработал. Одна только странная вещь. Поиск почему-то не любит букву Я. При вводе части имени с буквой Я результат пустой. Если попробовать ввести часть того же имени только без Я, то результат есть.
Подскажите, что с этим делать?

Да, кстати БД Paradox, если это сейчас важно.

Автор: ТоляМБА 4.12.2009, 18:59
PaWeLL, если это не стандартный глюк делфей, то тогда укажи версию делфи, СУБД и её версию и через какие компаненты подключаешься к БД.

Автор: PaWeLL 4.12.2009, 19:10
Цитата(ТоляМБА @ 4.12.2009,  18:59)
PaWeLL, если это не стандартный глюк делфей, то тогда укажи версию делфи, СУБД и её версию и через какие компаненты подключаешься к БД.

Delphi 7, база данных paradox 7. Подключаю все через SQL explorer 4.0

Автор: romchyk 3.1.2010, 18:38
Вместо like используйте ilike (в postgrtesql не учитывает регистр). 

Например так 
'Select filelds from workers where Surname ilike '+#39+'%'+a+'%'+#39+';';

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)