ABAP 中的字符串比较与通配符

举报
雨绸缪 发表于 2023/08/29 18:23:00 2023/08/29
【摘要】 通配符在ABAP语言中可以使用通配符进行模糊查询,模糊匹配,用作替代其他内容的字符。具体的通配符如下,分字符串和 SQL 条件两种使用场合。在带有运算符 CP 和 NP 的关系表达式中,“*”通常代表任何字符串,“+”代表任何单个字符。在使用运算符 LIKE 的 SQL 条件下,“%”代表任何字符串,“_”代表单个字符。在正则表达式中,使用一整套特殊字符来定义模式。通配符的特殊功能可以使用...

通配符

在ABAP语言中可以使用通配符进行模糊查询,模糊匹配,用作替代其他内容的字符。

具体的通配符如下,分字符串和 SQL 条件两种使用场合。

  • 在带有运算符 CPNP 的关系表达式中,“*”通常代表任何字符串,“+”代表任何单个字符。

  • 在使用运算符 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.

Snipaste_2023-08-29_17-57-07.png

OPEN SQL 中的使用

OPEN SQL where条件中通配符:

  • %:多位字符的通配符
  • _:一位字符的通配符

该模式区分大小写,转义符可以使用 ESCAPE 关键字来定义,ESCAPE 可用于定义单字符转义字符。

  1. 通过 % 构建模糊查询 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%'.
  1. 通过 _ 代替一个字符,例如:
SELECT MAKT FROM MAKT WHERE maktx LIKE 'TE_T'.

这条 SQL 语句就只会匹配以 TE 开头,以 T 结尾的物料描述字符串,比如 TEXT、TEST 等等。

  1. 使用 ESCAPE 转义一个字符
SELECT SINGLE maktx FROM makt INTO @DATA(lv_maktx) WHERE spras = 1 AND maktx LIKE '%//中' ESCAPE '/' .

Snipaste_2023-08-29_18-19-54.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。