Файловая система | Open SQL | ABAP | |
---|---|---|---|
Любое кол-во символов | * | % | * |
Один любой символ | ? | _ | + |
Давайте рассмотрим примеры поиска
SQL используется оператор LIKE
1 2 3 4 5 6 7 8 |
SELECT * FROM doktl WHERE id = 'SD' AND object LIKE 'AB%' AND langu = @sy-langu AND typ = 'E' INTO TABLE @DATA(text_tab) UP TO 100 ROWS. |
Внутренние таблицы ABAP используем оператор CP и NP для:
Чтение по маске:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
TYPES: BEGIN OF lty_s_tmp, id type i, line type string, END OF lty_s_tmp, lty_t_tmp TYPE TABLE OF lty_s_tmp WITH DEFAULT KEY. DATA(lt_data) = VALUE lty_t_tmp( ( id = 1 line = 'data 100 data' ) ( id = 2 line = 'data 100* data' ) ( id = 3 line = 'data 100##' ) ). LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<ls_data0>) WHERE line CP '*100*' . ENDLOOP. |
Удаление по маске(проверить возможность установить CP NP)
и использовать RANGE
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
types: begin of lty_itab, str type string, other_fields type string, end of lty_itab. data: lt_itab type standard table of lty_itab, lr_str type range of string, ls_str like line of lr_str. ls_str-sign = 'I'. ls_str-option = 'CP'. ls_str-low = 'sap*'. append ls_str to lr_str. delete lt_itab where str in lr_str. |
Эскейп символ.
Немного усложним задачу, что если в искомой строке уже будет специальный
символ. Например, мы хотим выбрать строку "В молоке 30% жирности"
Для этого и существуют дополнение ESCAPE. SAP рекомендует использоать символ "#"
Пример:
1 2 3 |
SELECT * FROM ZZZ_TEST_TAB INTO TABLE @DATA(lt_result) WHERE FIELD_1 LIKE '%30#%%' ESCAPE '#'. |
Для внутренних таблиц аналогично, но работает без дополнения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
TYPES: BEGIN OF lty_s_tmp, id type i, line type string, END OF lty_s_tmp, lty_t_tmp TYPE TABLE OF lty_s_tmp WITH DEFAULT KEY. DATA(lt_data) = VALUE lty_t_tmp( ( id = 1 line = 'data 100 data' ) ( id = 2 line = 'data 100* data' ) ( id = 3 line = 'data 100##' ) ). LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<ls_data0>) WHERE line CP '*100#**' . ENDLOOP. "где #* означает символ *, а последняя * - любое количество символов LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<ls_data1>) WHERE line CP '*100####' . ENDLOOP. |