【发布时间】:2021-10-22 08:04:15
【问题描述】:
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 C20.ORG like @Organization_ + '%'
THEN 1 ELSE 0 END)
ELSE 0 END)
在上面的查询中,第一种情况 WHEN 0 带有 IN 子句的语句给出了正确的记录,但是 WHEN 1 THEN 给了我 0 条记录,有人可以帮助我如何应用带有逗号分隔的字符串的 like 子句。
【问题讨论】:
-
minimal reproducible example 在询问 SQL 问题时是一个很好的开始。
-
在 WHERE 子句中使用 AND/OR 结构而不是 case 表达式通常会更好。
-
尝试发布一些带有示例和预期输出的示例数据
-
我可以使用以下查询获取记录:
select * from VYC20 C20 INNER JOIN STRING_SPLIT(@Organization_, ',') s ON C20.ORG LIKE s.value + '%'但我正在努力在案例声明中做同样的事情。 -
@Organization_ + '%'表示它必须以该值开头
标签: sql sql-server tsql