Текущее время: Чт, июл 03 2025, 23:01

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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