SELECT 中的左右 CP 比较?

Right-left CP comparison in SELECT?

我有一个 table 有一个列“A”,其值包含“*”。我想搜索一个像A列的词。

表 1 示例;

index ColumnA
1     New*
2     *york
3     Cat*
4     *ew*
.
.
.

@search = "纽约"

我想在 A 列中创建一个 select 语句搜索“Newyork”。因此搜索将为我 return 索引 1,2 和 4。

CP没用,因为我要反方向搜索

data: lf_search(10) value 'Newyork'.
select * from Table1 where ColumnA CP lf_search.
endselect.

有什么办法 select table 在其列中有模式值?

非常感谢。

没有直接的方法可以做到这一点。 我会这样处理:

  • 首先获取全部table内容
  • 然后一一对比删除
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 创建一个 table(我们称它为 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).

(这是一个猜测...请检查,我不确定它是否按原样工作)

您还可以循环 DB table,这只是 @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.