Текущее время: Пт, июн 27 2025, 00:43

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Чт, фев 25 2016, 19:03 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, окт 29 2007, 18:22
Сообщения: 254
Пол: Мужской
добрый день.
Помогите пожалуйста советом.
Есть такая задача: нужен модуль с импорт параметром переменной типа STRING для поиска банков в табличке BNKA по названию, по маске.
Если название банка состоит из одного слова, нет проблем, добавляю в начале и конце % и поиск LIKE.
проблема если название из нескольких слов и еще может содержать заглавные и строчные буквы алфавита. Например: Сбербанк России
сейчас я делаю
Code:
TRANSLATE bank USING '%'.

заменяя все пробелы для поиска. А вот, что делать с заглавными и срочными в голову не приходит.
Буду благодарен за помощь


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Чт, фев 25 2016, 22:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
В Open SQL для таких изысков средств нет.
Сам SAP в таких случаях в таблицах делает специальные поля для поиска, в которые сохраняет информацию в верхнем регистре.
При поиске вводимая строка приводится к верхнему регистру и SQL работает корректно.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Чт, фев 25 2016, 22:29 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, окт 29 2007, 18:22
Сообщения: 254
Пол: Мужской
Удав написал(а):
В Open SQL для таких изысков средств нет.
Сам SAP в таких случаях в таблицах делает специальные поля для поиска, в которые сохраняет информацию в верхнем регистре.
При поиске вводимая строка приводится к верхнему регистру и SQL работает корректно.

Да, для мастер данных есть поля для поиска в upper case но в данном случае нет. Может как то native sql?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Чт, фев 25 2016, 23:19 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
если oracle, то можно использовать utl_match.edit_distance_similarity( поле табл бд подготовл., поисковый шаблон подготовл. ),
но нужен второй select для предиката по результатам работы функции,
чтобы более точный поиск был надо в текстах спец символы удалить и привести к upper|lower case


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Чт, фев 25 2016, 23:28 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, окт 29 2007, 18:22
Сообщения: 254
Пол: Мужской
trop написал(а):
если oracle, то можно использовать utl_match.edit_distance_similarity( поле табл бд подготовл., поисковый шаблон подготовл. ),
но нужен второй select для предиката по результатам работы функции,
чтобы более точный поиск был надо в текстах спец символы удалить и привести к upper|lower case

Спасибо, буду пробовать


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 09:46 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
А зачем вы это делаете на уровне БД? У вас что там больше млн записей?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 10:20 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Сб, апр 07 2012, 00:43
Сообщения: 113
Вообще BNKA табличка не такая уж и большая.
Не знаю задачи, но может вытащить ее целиком в STATICS, или по каким-то предварительным параметрам, а потом использовать чтение, типа READ/LOOP или FIND REGEX.

_________________
[Удалено Админом]


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 10:23 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, окт 29 2007, 18:22
Сообщения: 254
Пол: Мужской
Kengur написал(а):
А зачем вы это делаете на уровне БД? У вас что там больше млн записей?

проблема не в размере. реализуется web servcie для поиска счетов собственных банков. требование от внешней системы, на ввод только названия, никаких кодов.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 10:35 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
paho написал:
Kengur написал(а):
А зачем вы это делаете на уровне БД? У вас что там больше млн записей?

проблема не в размере. реализуется web servcie для поиска счетов собственных банков. требование от внешней системы, на ввод только названия, никаких кодов.

Ну и что? Или у вас на вход в ws подается строка SQL запроса?

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 10:40 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Пн, окт 11 2004, 20:32
Сообщения: 2470
Пол: Мужской
paho написал:
Удав написал(а):
В Open SQL для таких изысков средств нет.
Сам SAP в таких случаях в таблицах делает специальные поля для поиска, в которые сохраняет информацию в верхнем регистре.
При поиске вводимая строка приводится к верхнему регистру и SQL работает корректно.

Да, для мастер данных есть поля для поиска в upper case но в данном случае нет. Может как то native sql?

Мне кажется лучше вам расширить табличку добавлением таких полей, и заполнять по факту изменения данных (в расширении) или периодически (фоновое задание). Тогда не нужен огород с Native SQL

_________________
- Может ли настоящий мастер кунг-фу получить по морде?
- Настоящий мастер может все!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 10:44 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, окт 29 2007, 18:22
Сообщения: 254
Пол: Мужской
Kengur написал(а):
А зачем вы это делаете на уровне БД? У вас что там больше млн записей?

проблема не в размере. реализуется web servcie для поиска счетов собственных банков. требование от внешней системы, на ввод только названия, никаких кодов.[/quote]
Ну и что? Или у вас на вход в ws подается строка SQL запроса?[/quote]
причем здесь SQL запрос. входящим параметром STRING переменная. Там может быть хоть одна буква, мне надо выбрать все банки с этой буквой например.
про SQL запрос тут обсуждалось, чтобы обвернуть в
Code:
EXECSQL

чтобы не городить огород с TRANSLATE и FIND. так как вариаций очень много


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 10:45 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, окт 29 2007, 18:22
Сообщения: 254
Пол: Мужской
ArmAnn написал:
Мне кажется лучше вам расширить табличку добавлением таких полей, и заполнять по факту изменения данных (в расширении) или периодически (фоновое задание). Тогда не нужен огород с Native SQL

спасибо. сам уже задумался над таким вариантом. сделаю VIEW с BNKA и какой то еще табличкой в UPPERCASE, буду наверное обновлять при событии в BNKA


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 11:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Я просто оставлю это здесь :D http://xkcd.ru/327/

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 11:09 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, окт 29 2007, 18:22
Сообщения: 254
Пол: Мужской
Kengur написал(а):
Я просто оставлю это здесь :D http://xkcd.ru/327/

я согласен, что задача такая себе, но если клиент просить, что поделать...нам всем за это деньги платят :)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как лучше реализовать поиск по маске в текстовом поле таблицы БД?
СообщениеДобавлено: Пт, фев 26 2016, 12:22 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Ср, ноя 03 2004, 14:51
Сообщения: 1912
Откуда: КраснАдар
Пол: Мужской
Вот еще один не сильно оптимальный вариант. Может пригодится
Code:
TYPES:
  t_text     TYPE bnka-banka,
  t_text_tab TYPE STANDARD TABLE OF t_text.

DATA: lt_tab_normal TYPE t_text_tab.
DATA: lt_tab_nospace TYPE t_text_tab.
DATA: lt_bnka TYPE TABLE OF bnka.
DATA: count TYPE i.
DATA: r_banka TYPE RANGE OF bnka-banka WITH HEADER LINE.
DATA: banka TYPE bnka-banka.

FIELD-SYMBOLS <text> TYPE t_text.

PARAMETERS: p_input TYPE bnka-banka DEFAULT 'ИнВеСт бАНК'.

START-OF-SELECTION.
  banka = p_input.
  PERFORM create_variations USING banka CHANGING lt_tab_normal.

  banka = p_input.
  CONDENSE banka NO-GAPS.
  PERFORM create_variations USING banka CHANGING lt_tab_nospace.
  APPEND LINES OF lt_tab_nospace TO lt_tab_normal.

  LOOP AT lt_tab_normal ASSIGNING <text>.
    count = count + 1.
    r_banka-sign = 'I'.
    r_banka-option = 'CP'.
    CONCATENATE '*' <text> '*' INTO r_banka-low.
    APPEND r_banka.

    IF count = 500.
      count = 0.
      SELECT * FROM bnka APPENDING TABLE lt_bnka
        WHERE banka IN r_banka.
      REFRESH r_banka.
    ENDIF.
  ENDLOOP.
  SELECT * FROM bnka APPENDING TABLE lt_bnka
    WHERE banka IN r_banka.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_structure_name = 'BNKA'
    TABLES
      t_outtab         = lt_bnka.



FORM create_variations USING    VALUE(text) TYPE t_text
                       CHANGING text_tab    TYPE t_text_tab.

  DATA:
    rest     TYPE t_text,
    rest_tab TYPE t_text_tab,
    lc       TYPE char1,
    uc       TYPE char1.

  TRANSLATE text TO LOWER CASE.

  lc = uc = text(1).
  TRANSLATE uc TO UPPER CASE.

  sy-fdpos = strlen( text ).
  IF sy-fdpos = 1.
    APPEND lc TO text_tab.
    IF lc <> uc.
      APPEND uc TO text_tab.
    ENDIF.
    EXIT.
  ENDIF.

  rest = text+1.
  PERFORM create_variations USING    rest
                            CHANGING rest_tab.

  LOOP AT rest_tab ASSIGNING <text>.
    CONCATENATE lc <text> INTO rest RESPECTING BLANKS.
    APPEND rest TO text_tab.
    IF lc <> uc.
      CONCATENATE uc <text> INTO rest RESPECTING BLANKS.
      APPEND rest TO text_tab.
    ENDIF.
  ENDLOOP.

ENDFORM.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB