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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:15:03