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

如何使CDS视图查询实现大小写不敏感?

ABAP CDS视图实现大小写不敏感查询方案

针对数据库字段值与搜索输入大小写不匹配导致无结果的问题,ABAP CDS提供了几种直接的语法方案来实现大小写不敏感匹配:

方案1:统一转换字段大小写(推荐用于固定匹配场景)

在CDS视图中将name1字段转换为大写(或小写)后输出,这样用户搜索时只需保证拼写正确,无论输入大小写都能匹配。同时需补充完整group by子句(原代码中该部分缺失,必须包含所有非聚合字段):

define view ZCDSV_XXX_XXXX 
as select from epkuatv as a
inner join epku_adr1cp as b
on a.epkunnr = b.epkunnr   
{
key a.epkunnr as EUNumber,
upper(b.name1) as EndUserName1, -- 转换为大写输出,消除大小写差异
b.name2 as EndUserName2,
b.street as Address,
b.str_suppl1 as AddressStreet2,
b.city1 as City,
b.region as State Province,
b.post_code1 as Postal Code,
cast(max( case a.atinn when '0000001361' then atwrt end ) as 
abap.char(4)) as End User Group, 
max( case a.atinn when '0000001361' then atinn end ) as 
EUGRPCHAR,
cast(max( case a.atinn when '0000009763' then atwrt 
when '0000009639' then atwrt end ) as abap.char(4)) as 
EndUserParGroup,
max( case a.atinn when '0000009763' then atinn 
when '0000009639' then atinn end ) as EUPARGRPCHAR         

}
group by a.epkunnr, b.name1, b.name2, b.street, b.str_suppl1, b.city1, b.region, b.post_code1

方案2:在查询条件中使用大小写不敏感匹配

如果不需要修改视图输出的字段格式,可以在调用CDS视图时,通过upper()或lower()函数统一转换搜索值和字段值:

SELECT * FROM ZCDSV_XXX_XXXX
WHERE upper(EndUserName1) = upper('Starbucks');

或者使用ABAP CDS原生的CONTAINS函数并指定CASE INSENSITIVE选项:

SELECT * FROM ZCDSV_XXX_XXXX
WHERE contains(EndUserName1, 'Starbucks', case insensitive);

方案3:通过CDS参数实现动态大小写不敏感过滤

如果需要在CDS视图中内置过滤逻辑,可以定义参数并在WHERE子句中统一处理大小写:

define view ZCDSV_XXX_XXXX 
with parameters
  @EndUserNameFilter: abap.char(40)
as select from epkuatv as a
inner join epku_adr1cp as b
on a.epkunnr = b.epkunnr   
where upper(b.name1) = upper(:EndUserNameFilter) -- 参数与字段统一转大写匹配
{
key a.epkunnr as EUNumber,
b.name1 as EndUserName1,
b.name2 as EndUserName2,
b.street as Address,
b.str_suppl1 as AddressStreet2,
b.city1 as City,
b.region as State Province,
b.post_code1 as Postal Code,
cast(max( case a.atinn when '0000001361' then atwrt end ) as 
abap.char(4)) as End User Group, 
max( case a.atinn when '0000001361' then atinn end ) as 
EUGRPCHAR,
cast(max( case a.atinn when '0000009763' then atwrt 
when '0000009639' then atwrt end ) as abap.char(4)) as 
EndUserParGroup,
max( case a.atinn when '0000009763' then atinn 
when '0000009639' then atinn end ) as EUPARGRPCHAR         

}
group by a.epkunnr, b.name1, b.name2, b.street, b.str_suppl1, b.city1, b.region, b.post_code1

调用时传入参数即可实现大小写不敏感匹配:

SELECT * FROM ZCDSV_XXX_XXXX(EndUserNameFilter = 'Starbucks');

内容的提问来源于stack exchange,提问作者Sandip Barnwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:50:07