在我的 AS ABAP 7.50 系统中,我有一个材料长度为 18 的表,我需要通过 CDS 将其公开,就像在 S/4 中材料长度为 40 一样。系统中的材料 ID 可以是数字(带有前导零)或字母数字。材料字段需要强制转换为MATNR40,如果ID是数字,则需要前导零添加最多40个字符。
首先,我尝试了`lpad. 但当然,它也会在字母数字值中添加前导零:
lpad( cast(matnr as matnr40), 40, '0' ) as material_long,
然后我添加了一个case
,但我无法使条件按我预期的那样工作。正如康斯坦丁在评论中确认的那样,我尝试在这里使用正则表达式是不可能的:
case when matnr like '%[^0-9.]%'
then lpad( cast(matnr as matnr40), 40, '0' )
else cast(matnr as matnr40)
end as material_long,
CDS 本身是否有解决此问题的方法?
源表:
MATNR18 | 描述 |
---|---|
000000000000000142 | 数字 ID 材料 |
MATERIAL_2 | 字母数字 ID |
预期结果:
MATNR40 | 描述 |
---|---|
00000000000000000000000000000000000000142 | 数字 ID 材料 |
MATERIAL_2 | 字母数字 ID |