You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:16:26