В моей системе AS ABAP 7.50 у меня есть таблица, в которой длина материала равна 18, и мне нужно открыть ее через CDS, как если бы длина материала была 40, как в S / 4. Идентификаторы материалов в системе могут быть числовыми (с ведущими нулями) или буквенно-цифровыми. Поле материала должно быть преобразовано в MATNR40, и если идентификатор числовой, необходимо добавить начальные нули до 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 | Description |
---|---|
000000000000000142 | Numeric ID material |
MATERIAL_2 | Alphanumeric ID |
Ожидаемый результат:
MATNR40 | Description |
---|---|
0000000000000000000000000000000000000142 | Numeric ID material |
MATERIAL_2 | Alphanumeric ID |
LIKE
не понимает регулярных выражений. Это больше подстановочных знаков, но ничего особенного, как вы пытаетесь сделать. См. Официальную SAP-документацию regex vs. нравится. Если вы хотите использовать регулярное выражение в каком-либо коде ABAP, вы можете использовать^\d+$
только для соответствия числовые значения илиNOT LIKE %_%
в SQL / CDS, если все нечисловые значения содержат символ подчеркивания. - person konstantin   schedule 12.01.2021