如何在ABAP CDS中使用输入参数实现类似SQL LIKE的查询?
解决ABAP CDS视图中LIKE参数模糊查询的报错问题
你遇到的这个报错核心原因是:ABAP CDS对LIKE条件的比较值有严格语法限制——它不能直接使用参数变量,必须是拼接了通配符的完整字符字面量表达式。哪怕你的参数是字符类型,直接放在LIKE后面也不满足编译器的规则。
要实现%p_payer这种前缀模糊查询(或前后都模糊的%p_payer%),你需要用CDS支持的字符串拼接逻辑,把通配符和参数组合成合法的比较值,下面是两种常用的可行方案:
方式1:使用concat函数(兼容性最优)
concat是ABAP CDS标准的字符串连接函数,适配所有版本的ABAP环境。比如要实现后缀匹配(KUNNR以传入的参数值结尾):
@AbapCatalog.sqlViewName: 'ZAMPAYERINFO' @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'Read payer information' define view zam_payer_info with parameters p_payer: abap.char(10) as select distinct from knvp join kna1 on knvp.kunnr = kna1.kunnr { key knvp.kunnr as Payer, kna1.name1 as Name } where knvp.kunnr like concat('%', $parameters.p_payer)
如果需要全模糊匹配(KUNNR包含传入的参数值),只需嵌套两次concat:
where knvp.kunnr like concat(concat('%', $parameters.p_payer), '%')
方式2:使用||字符串连接运算符(ABAP 7.50+适用)
如果你的系统是ABAP 7.50及以上版本,可以用更简洁的||运算符拼接:
where knvp.kunnr like '%' || $parameters.p_payer
全模糊匹配的写法:
where knvp.kunnr like '%' || $parameters.p_payer || '%'
额外注意事项
如果你的参数p_payer本身可能包含%或_这类LIKE通配符(比如用户输入了A%),为了避免这些字符被当作通配符解析,可添加escape子句做转义处理:
where knvp.kunnr like concat('%', $parameters.p_payer) escape '\'
此时用户输入的\会成为转义符,比如输入A\%就能匹配实际包含A%的KUNNR值。
内容的提问来源于stack exchange,提问作者softshipper
相关产品推荐
相关产品推荐

