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.
我有一个 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.