案例陈述没有看到价值

时间:2015-01-21 23:17:09

标签: sql-server

这里没有新手但也没有专家。我有以下示例:

Declare @Test VARCHAR(max) = 'Value1, Value2'
select case when 'Value1' in (@Test) then 1 else 0 end as Col1

返回0,不应该我希望它返回1吗?我需要它返回1.

3 个答案:

答案 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