powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Поиск в таблице по нескольким полям
5 сообщений из 5, страница 1 из 1
Поиск в таблице по нескольким полям
    #39648806
well9999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чтобы выполнять поиск по разным полям, в запрос делаю так:
....................................................................
WHERE SURNAME LIKE '%'||UPPER(:P1_SEARCH)||'%'
OR NAME LIKE '%'||UPPER(:P1_SEARCH)||'%'
....................................................................
P1_SEARCH это TEXT FIELD, поле поиска.

Всё работает. В таблице отображаются все строки, если слово в TEXT FIELD встречается в каких либо полях SURNAME, NAME

Вопрос: можно ли сделать поиск по двум словам в строке поиска?
Тоесть если я например введу в TEXT FIELD "aaa bbb", то в таблице должны отображаться те записи, если в одном из полей есть "aaa", а в другом поле "bbb".
...
Рейтинг: 0 / 0
Поиск в таблице по нескольким полям
    #39648888
UchO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Регулярками строку посика разбирать до разделителя (у вас пробел)и после.
...
Рейтинг: 0 / 0
Поиск в таблице по нескольким полям
    #39649245
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UchOРегулярками строку посика разбирать до разделителя (у вас пробел)и после.
...Интересная задачка. Можно как-то так
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT  SURNAME, FIRSTNAME FROM mytable
WHERE 1=(SELECT min(CASE WHEN UPPER(COALESCE(l_name,'')) LIKE '%'||UPPER(search_w)||'%'
                              OR UPPER(COALESCE(f_name,'')) LIKE '%'||UPPER(search_w)||'%'
                         THEN 1 
                         ELSE 0 
                         END) 
         FROM (SELECT REGEXP_SUBSTR(:P1_SEARCH, '\S+',1,level) AS search_w  FROM DUAL            
         CONNECT BY REGEXP_SUBSTR(:P1_SEARCH, '\S+',1,level) is not null) 
         )



В идеале, вместо LIKE нужно дополнить функцией, которая для строковых типов будет сравнивать через LIKE, а для прочих типов проверять точное совпадение
...
Рейтинг: 0 / 0
Поиск в таблице по нескольким полям
    #39649248
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Недоглядел, подправил sql
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT  SURNAME, FIRSTNAME FROM mytable
WHERE 1=(SELECT min(CASE WHEN UPPER(COALESCE(SURNAME,'')) LIKE '%'||UPPER(search_w)||'%'
                              OR UPPER(COALESCE(FIRSTNAME,'')) LIKE '%'||UPPER(search_w)||'%'
                         THEN 1 
                         ELSE 0 
                         END) 
         FROM (SELECT REGEXP_SUBSTR(:P1_SEARCH, '\S+',1,level) AS search_w  FROM DUAL            
         CONNECT BY REGEXP_SUBSTR(:P1_SEARCH, '\S+',1,level) is not null) 
         )
...
Рейтинг: 0 / 0
Поиск в таблице по нескольким полям
    #39649776
well9999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sereginseregin,
Спасибо, работает!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Поиск в таблице по нескольким полям
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]