ABAP SQL 截取字段值、去掉前导零连表匹配查询

应用场景:A表a字段取值后面四位与B表b字段进行匹配连表,假设要把工厂作为供应商查询。

方法有两种
1.截取法,知道数据的固定位数。
官方解释:SUBSTRING( arg, pos, len ) ,Substring arg from the position pos with length len. pos and len must be specified so that the substring is within arg.
翻译:长度为len的位置pos的子字符串arg。Pos和len必须指定,以便子字符串在arg内。
2.去零法,位数不固定。
官方解释: LTRIM( arg, char ), String with the content of arg in which all trailing blanks and leading characters are removed that match the character in char. A blank in char is significant.
翻译:内容为arg的字符串,删除所有与char中字符匹配的尾随空格和前导字符。char中的空白是重要的。

截取法源代码

"工厂连接为供应商
SELECT
       marc~werks,
       marc~matnr,
       l~lifnr
 FROM marc     "substring 供应商号 第七位开始取值4位 与 工厂匹配
 LEFT JOIN lfa1 AS l ON SUBSTRING( l~lifnr,7,4  ) EQ marc~werks
WHERE marc~werks = '7000'
 INTO TABLE @DATA(lt_alv)
 UP TO 10 ROWS.
IF sy-subrc = 0.
  cl_demo_output=>display( lt_alv ).
ENDIF.

截取法结果图
工厂与供应商的后四位进行匹配连表结果。
除了7000供应商还有其他包含7000的供应商也出来了。
在这里插入图片描述

去零法源代码

SELECT
       marc~werks,
       marc~matnr,
       l~lifnr
 FROM marc             "LTRIM 供应商号 前导零去掉,与工厂匹配
 LEFT JOIN lfa1 AS l ON ltrim( l~lifnr, '0' ) EQ marc~werks
WHERE marc~werks = '7000'
 INTO TABLE @DATA(lt_LTRIM)
 UP TO 10 ROWS.
IF sy-subrc = 0.
  cl_demo_output=>display( lt_LTRIM ).
ENDIF.

去零法结果图
只取值的到7000的供应商。
在这里插入图片描述
注意点
这两种方法,都有相对应的使用场景,请灵活使用。
在这里插入图片描述

今天的分享到这里
分享使我快乐,我是寒武青锋。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值