我有一个变量
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
答案 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)