一个SQL问题。使用逗号分隔值检查条件

时间:2011-07-15 13:46:37

标签: sql sql-server sql-server-2008

我有一个变量

DECLARE @AssignOn nvarchar(20)='0,2,5'

我想检查一下这样的情况

DECLARE @index int
SET DATEFIRST 7
SELECT @index=DATEPART(DW, GETDATE())-1
IF(CONVERT(nvarchar(2),@index) IN @AssignOn)

IN不能在这里使用。执行此操作的任何其他方法INLINE

4 个答案:

答案 0 :(得分:2)

您可以使用CharIndex查找您是否匹配。如果第一个字符串出现在第二个字符串中,则返回非零值。

IF(CHARINDEX(CONVERT(nvarchar(2),@index), @AssignOn) > 0)

答案 1 :(得分:1)

最简单的方法是在csv列表字符串中搜索子字符串', needle ,'。但是,这对第一个和最后一个元素不起作用。这可以通过将逗号连接到csv列表字符串的每一侧来克服。

SQL中的示例可能是:

SELECT
    CHARINDEX(','+ NEEDLE +',', ','+ HAYSTACK +',')
FROM table;

或使用LIKE:

SELECT *
FROM table
WHERE ','+ HAYSTACK +',' LIKE '%,'+ NEEDLE +',';

答案 2 :(得分:0)

IF CHARINDEX(','+CONVERT(nvarchar(2),@index)+',', ','+@AssignOn+',') <> 0

答案 3 :(得分:0)

实际上,您可以在代码中定义值;

DECLARE @AssignOn TABLE (value int)
   INSERT @AssignOn VALUES (0),(2),(5)

... @index IN (SELECT value FROM @AssignOn)