ABAP 中的字符串比较与通配符
【摘要】 通配符在ABAP语言中可以使用通配符进行模糊查询,模糊匹配,用作替代其他内容的字符。具体的通配符如下,分字符串和 SQL 条件两种使用场合。在带有运算符 CP 和 NP 的关系表达式中,“*”通常代表任何字符串,“+”代表任何单个字符。在使用运算符 LIKE 的 SQL 条件下,“%”代表任何字符串,“_”代表单个字符。在正则表达式中,使用一整套特殊字符来定义模式。通配符的特殊功能可以使用...
通配符
在ABAP语言中可以使用通配符进行模糊查询,模糊匹配,用作替代其他内容的字符。
具体的通配符如下,分字符串和 SQL 条件两种使用场合。
在带有运算符
CP
和NP
的关系表达式中,“*
”通常代表任何字符串,“+
”代表任何单个字符。在使用运算符
LIKE
的 SQL 条件下,“%
”代表任何字符串,“_
”代表单个字符。在正则表达式中,使用一整套特殊字符来定义模式。通配符的特殊功能可以使用转义字符取消
字符串中的使用
逻辑表达式 | 英文 | 含义 |
---|---|---|
s1 CO s2** |
Contains Only | 如果 s1 仅包含 s2 中的字符,逻辑表达式为真,区分大小写,比较尾部空格 |
s1 CN s2 |
Contains Not Only | 如果 s1 还包含 s2 之外的字符,逻辑表达式为真,区分大小写,毕竟尾部空格 |
s1 CA s2 |
Contains Any | 如果 s1 包含任何一个 s2 中的字符,逻辑表达式为真,区分大小写,比较尾部空格 |
s1 NA s2 |
Contains Not Any | 如果 s1 不包含 s2 的任何字符,逻辑表达式为真,区分大小写,毕竟尾部空格 |
s1 CS s2 |
Contains String | 如果 s1 包含字符串 s2 ,逻辑表达式为真 |
s1 NS s2 |
Contains No String | 如果 s1 不包含字符串 s2,逻辑表达式为真 |
s1 CP s2 |
Contains Pattern | 如果 s1 包含模式 s2,逻辑表达式为真 |
s1 NP s2 |
Contains No Pattern | 如果 s1 不包含模式 s2,逻辑表达式为真 |
注意:
CO
CN
CA
,NA
比较时区分大小写,且尾部空格也在比较范围之内,
CS
NS
CP
NP
比较时忽略尾部空格且不区分大小写,比较结束后,如果结果为真,SY-FDPOS
将给出 s2 在 s1 中的偏移量信息
DATA res TYPE string VALUE 'SAP ABAP PROGRAM'.
WRITE: / res, `'s length is:`, strlen( res ).
IF res CP '*Ro*'.
WRITE :/ res, 'contains pattern `*Ro*`, success:', sy-fdpos. "success -> sy-fdpos = offset of ‘r’ in res
ELSE.
WRITE :/ 'failure:', sy-fdpos.
ENDIF.
ULINE.
IF res CP '*xy*'.
WRITE :/ 'success:', sy-fdpos.
ELSE.
WRITE :/ 'failure:', sy-fdpos. " failure-> sy-fdpos = length OF ( res )
ENDIF.
OPEN SQL 中的使用
OPEN SQL where条件中通配符:
%
:多位字符的通配符_
:一位字符的通配符
该模式区分大小写,转义符可以使用 ESCAPE
关键字来定义,ESCAPE
可用于定义单字符转义字符。
- 通过 % 构建模糊查询 SQL 语句,比如查询以 6 开头的总账科目号:
SELECT bukrs
gjahr
h_monat
hkont
h_budat
h_blart
belnr
h_waers
wrbtr
buzei
shkzg h_hwaer dmbtr nplnr zuonr sgtxt prctr kostl aufnr paobjnr
FROM bseg INTO CORRESPONDING FIELDS OF TABLE gt_bseg
WHERE bukrs IN so_bukrs
AND h_budat IN so_budat
AND hkont IN so_hkont
AND prctr IN so_prctr
AND hkont LIKE '6%'.
- 通过
_
代替一个字符,例如:
SELECT MAKT FROM MAKT WHERE maktx LIKE 'TE_T'.
这条 SQL 语句就只会匹配以 TE 开头,以 T 结尾的物料描述字符串,比如 TEXT、TEST 等等。
- 使用 ESCAPE 转义一个字符
SELECT SINGLE maktx FROM makt INTO @DATA(lv_maktx) WHERE spras = 1 AND maktx LIKE '%//中' ESCAPE '/' .
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)