如何在CASE语句中对逗号分隔字符串使用LIKE子句
问题原因
当前WHEN 1分支逻辑错误:你直接将包含逗号的整串@Organization_作为LIKE匹配前缀,相当于要求C20.ORG以111,111A开头,自然没有符合条件的记录。需求实际是对逗号分隔的每一个独立值,分别做前缀匹配,只要任意一个值匹配就算符合条件。
修正方案
将STRING_SPLIT拆分逻辑和LIKE结合,用EXISTS子句判断是否存在匹配的拆分项,修改后的完整查询如下:
DECLARE @IsSearch_ BIT; SET @IsSearch_ ='True' DECLARE @Organization_ VARCHAR(100); SET @Organization_ ='111,111A' select * from VYC20 C20 where (@Organization_ IS NULL) OR (1 = CASE @IsSearch_ WHEN 0 THEN (CASE WHEN @Organization_ IS NOT NULL AND C20.ORG IN (select value from STRING_SPLIT(@Organization_, ',')) THEN 1 ELSE 0 END) -- 这里修改为拆分后逐个做前缀匹配 WHEN 1 THEN (CASE WHEN EXISTS ( SELECT 1 FROM STRING_SPLIT(@Organization_, ',') WHERE C20.ORG LIKE value + '%' ) THEN 1 ELSE 0 END) ELSE 0 END)
逻辑说明
- 先用
STRING_SPLIT把@Organization_拆成111和111A两个独立值 - 遍历所有拆分后的值,判断
C20.ORG是否以任意一个值为前缀 - 只要有一个匹配项,
EXISTS就返回真,对应记录会被检索出来
内容的提问来源于stack exchange,提问作者gaurav prasad
相关产品推荐
相关产品推荐

