这里没有新手但也没有专家。我有以下示例:
Declare @Test VARCHAR(max) = 'Value1, Value2'
select case when 'Value1' in (@Test) then 1 else 0 end as Col1
返回0,不应该我希望它返回1吗?我需要它返回1.
答案 0 :(得分:3)
首先让我们看看你的代码做了什么。它等同于说"如果字符串文字' a'在包含字符串文字的对象集合中,返回1,否则为0"
替换' a'与' Value1'和' b'使用' Value1,Value2'而且你会发现这些陈述是等价的。有两种方法可以达到你想要的效果。首先,您可以将查询更改为通配符搜索。
select case when @test like '%Value1%' then 1 else 0 end
第二个更复杂一点,但对于关系数据库的想法更为真实。首先,您需要将测试字符串拆分为包含值' value1'和' value2'。此时,由于它们是不同的值,而不是单个字符串文字,因此您可以进行IN查找。假设你有一个名为dbo.stringSplit的字符串拆分函数
select case when 'Value1' in (select stringValue from dbo.stringSplit(@Test, ',')) then 1 else 0 end
答案 1 :(得分:1)
这是因为@Test
是一个字符串。您可能希望将其值拆分以达到您想要的效果。
SELECT CASE WHEN 'Value1' in ('Value1', 'Value2') THEN 1 ELSE 0 END AS COL1
答案 2 :(得分:1)
如果您的搜索字符串包含与否,您可能需要使用LIKE
运算符来查找。
SELECT CASE WHEN @Test like '%Value1%' THEN 1 ELSE 0 END AS COL1