У меня в таблице есть столбец «А», значения которого содержат «*». Я хочу найти слово, похожее на столбец A.
Таблица 1 Пример;
index ColumnA
1 New*
2 *york
3 Cat*
4 *ew*
.
.
.
@search = "Нью-Йорк"
Я хочу создать оператор select для поиска «Нью-Йорк» в столбце A. Таким образом, поиск вернет мне индексы 1,2 и 4.
CP
бесполезен, потому что я хочу искать в противоположном направлении.
data: lf_search(10) value 'Newyork'.
select * from Table1 where ColumnA CP lf_search.
endselect.
Есть ли способ выбрать таблицу со значением шаблона в столбце?
Большое спасибо.
Прямого способа сделать это нет. Я бы подошел так:
SELECT ColumnA " Avoid SELECT *
FROM table1
INTO TABLE @DATA(lt_table1). " Add a where clausule if possible to avoid getting all the table
LOOP AT lt_table1 INTO DATA(wa_table1).
IF lf_search NP wa_table1-ColumnA. " NP = NOT (... CP ...)
DELETE lt_table1 INDEX sy-tabix.
ENDIF.
ENDLOOP.
Если вам действительно нужно сделать этот процесс через базу данных. Я думаю, что есть возможность, очень необычно. Сначала создайте таблицу, скопировав table1 (назовем ее table1_bis). Затем...
* Delete entire table1_bis db tab
DELETE FROM table1_bis.
* Insert the search item in the table
DATA(wa_table1_bis) = VALUE table1_bis( ColumnA = lf_search ).
INSERT table1_bis FROM wa_table1_bis.
* Then SELECT with INNER JOIN
SELECT a~ColumnA
FROM table1 AS a
INNER JOIN table1_bis AS b
ON b~Column1 CP a~Column1
INTO TABLE @DATA(lt_table1).
(это предположение... пожалуйста, проверьте, я не совсем уверен, что это работает как есть)
Вы также можете зациклить таблицу БД, что является еще одним вариантом того, что предложил @cape_bsas:
DATA: itab TYPE TABLE OF table1-ColumnA.
SELECT ColumnA, 'Newyork' AS pattern
FROM table1
INTO @DATA(line).
CHECK line-pattern CP line-ColumnA.
APPEND line-ColumnA TO itab.
ENDSELECT.