You need to enable JavaScript to run this app. AS ABAP 7.50环境下CDS 18位MATNR转40位MATNR40仅补数字前导零的方案
优惠活动
大模型
产品
解决方案
定价
更多

AS ABAP 7.50环境下CDS 18位MATNR转40位MATNR40仅补数字前导零的方案

AS ABAP 7.50环境CDS物料号40位适配实现

最终实现代码

case
  when trim( translate( matnr, from = '0123456789', to = '          ' ) ) = ''
    then lpad( rtrim( cast( matnr as matnr40 ) ), 40, '0' )
  else cast( rtrim( matnr ) as matnr40 )
end as material_long

逻辑说明

  • 纯数字判断:将物料号内所有0-9的数字字符逐位替换为空格,再去除字符串首尾所有空格,若结果为空字符串则证明原物料号为纯数字类型,触发左补零逻辑;若替换后残留非数字字符、去空后结果不为空,则属于字母数字混合类型,直接完成类型转换,不执行补零。
  • 补零逻辑修正:纯数字分支中,先将原物料号转换为MATNR40类型,去除右侧因长度对齐填充的冗余空格,再执行左补零操作。避免直接对cast结果做lpad时,因cast后字符串已达到40位长度(右侧为对齐空格)导致lpad无法触发补零的问题。
  • 原有代码问题修正:之前的CASE判断逻辑方向完全颠倒——原代码是“检测到非数字字符时执行补零”,和需求中“仅纯数字物料号补零”的规则完全相反,因此结果始终不符合预期。同时原LIKE模式不支持ABAP环境下的正则字符类匹配,条件实际无法生效。

用例验证

  • 纯数字物料号000000000000000142:经替换、去空后结果为空,触发补零逻辑,最终输出固定40位长度的字符串0000000000000000000000000000000000000142,符合预期。
  • 字母数字混合物料号MATERIAL_2:经替换后残留非数字字符,不触发补零,直接转换为MATNR40类型保留原字符串内容,左侧无额外补零,符合预期。

内容的提问来源于stack exchange,提问作者RaTiO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.09 10:27:03