技术交流群里一个朋友关于 SAP ABAP CDS View 字符串拼接的问题
有朋友提问:
cds view里如何将抽取到的九个字符串用下划线进行拼接,并且这九个字符串任何一个为空的话则不显示这个字符和它前后的下划线
我尝试使用concat和case when语句联用,但eclipse报错。望您空闲的时候帮忙看一下
我之前写过一篇文章,介绍过 CDS View 里的字符串拼接 function:
使用 CDS view SQL Function 将视图某些字段进行合并
这位朋友试过了:
concat_with_space这个方法尝试过了。语法本身没问题,但需求没得到解决,目前需求是cds view里如何将抽取到的九个字符串用下划线进行拼接,并且这九个字符串任何一个为空的话则不显示这个字符和它前后的下划线。我尝试用concat和case when连用但还是不行
另一个朋友的建议:
我用的笨办法实现多个字符串拼接,9个字符以此类推
demo 数据:
最后的实现效果:
源代码:
@AbapCatalog.sqlViewName: 'ZTEST001_V'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'XXX'
define view ZYTEST0001 as select from ztest001
{
key key1 as Key1,
replace(
replace(
CONCAT(
replace(
CONCAT(c1,
CONCAT('_',
CONCAT(c2,
CONCAT('_',
CONCAT(c3,
CONCAT('_',
CONCAT(c4,
CONCAT('_',
CONCAT(c5,
CONCAT('_',
CONCAT(c6,
CONCAT('_',
CONCAT(c7,
CONCAT('_',
CONCAT(c8,
CONCAT('_', c9) ))))))))) ))))))
, '__' ,'_' ),'&&&^^^^&&&'), '_&&&^^^^&&&', '' ), '&&&^^^^&&&' , '' )
as C1
}
这段CDS View的源代码定义了一个名为ZYTEST0001的CDS View,它从数据库表ZTEST001中选择数据。该视图定义了一个名为C1的字段,用于存储根据一系列字段(c1到c9)拼接而成的字符串,其中用下划线连接,并进行了一系列替换操作。
首先,@AbapCatalog.sqlViewName注解指定了该CDS View对应的SQL视图名称为’ZTEST001_V’,@AbapCatalog.compiler.compareFilter注解启用了编译时的过滤器比较功能,@AbapCatalog.preserveKey注解保留了CDS视图中的主键,@AccessControl.authorizationCheck注解指定了在访问控制方面不需要进行权限检查,@EndUserText.label注解为该CDS View提供了一个标签’XXX’,用于在终端用户界面显示。
在CDS View的主体部分,使用了select from语句从数据库表ZTEST001中选择数据。字段key1被定义为Key1,并在下一行进行了一系列操作。
在这个操作中,首先使用了CONCAT函数将字段c1到c9按照一定的格式拼接起来,其中每个字段之间用下划线连接。接着,使用replace函数对拼接后的字符串进行多次替换,将多余的下划线去除,并将特定的字符串’&&&^^^^&&&'替换为空字符串,最终得到字段C1。
换言之,该CDS View的作用是将表ZTEST001中的字段c1到c9按照一定的规则拼接成一个新的字段C1,并对拼接后的字符串进行一系列替换操作,以满足特定的需求。
举例来说,假设表ZTEST001中的字段c1到c9的值分别为’A’、‘B’、‘C’、‘D’、‘E’、‘F’、‘G’、‘H’、‘I’,那么经过CDS View定义的操作后,字段C1的值将为’A_B_C_D_E_F_G_H_I’。
- 点赞
- 收藏
- 关注作者
评论(0)