技术交流群里一个朋友关于 SAP ABAP CDS View 字符串拼接的问题

举报
汪子熙 发表于 2024/04/05 20:21:08 2024/04/05
【摘要】 有朋友提问:cds view里如何将抽取到的九个字符串用下划线进行拼接,并且这九个字符串任何一个为空的话则不显示这个字符和它前后的下划线我尝试使用concat和case when语句联用,但eclipse报错。望您空闲的时候帮忙看一下我之前写过一篇文章,介绍过 CDS View 里的字符串拼接 function:使用 CDS view SQL Function 将视图某些字段进行合并这位...

有朋友提问:

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’。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。