有一个字符串A:【Q10003】
另外一个字符串B:【Q10001-Q10015,Q10023,Q10031】,代表从Q10001、Q10002、Q10003直到Q10015,同时还有Q10023和Q10031;其中连续的字符串用中横杠分隔,不连续的字符串用逗号分隔。现在我想判断字符串A是否在字符串B中,请教应该如何实现
另外一个字符串B:【Q10001-Q10015,Q10023,Q10031】,代表从Q10001、Q10002、Q10003直到Q10015,同时还有Q10023和Q10031;其中连续的字符串用中横杠分隔,不连续的字符串用逗号分隔。现在我想判断字符串A是否在字符串B中,请教应该如何实现
declare @b int
declare @a varchar(50)
set @b = Convert(int,substring('Q10012',2,5))set @a = '【Q10001-Q10015,Q10023,Q10031】'select 1 where @b >= Convert(int,substring(@a,3,5)) or @b<= Convert(int,substring(@a,10,5)) or @b = Convert(int,substring(@a,17,5)) or @b= Convert(int,substring(@a,22,5))--虽然有点土
这是我给出的例子的解决方案,但实际情况下,我的字符串B可能不是例子所示,可能会是这样的
【Q10001-Q10015,Q10017-Q10023,Q10031】
set @a='Q10003'
declare @b varchar(1000)
set @b='Q10001-Q10015,Q10023,Q10031'DECLARE @t TABLE(id INT IDENTITY,b INT)
DECLARE @c TABLE(x VARCHAR(100))
INSERT @t SELECT TOP 100 0 FROM syscolumns sDECLARE @sql VARCHAR(1000)INSERT @c
SELECT SUBSTRING(@b,id,CHARINDEX(',',@b+',',id)-id)
FROM @t
WHERE SUBSTRING(','+@b,id,1)=','SELECT @sql=ISNULL(@sql+' or ','')+
CASE WHEN CHARINDEX('-',x)>0 THEN ''''+@a+''''+' between ''' +REPLACE(x,'-',''' and ''')+''''
ELSE
''''+@a+''''+'='''+x+''''
END
FROM @c EXEC('if '+@sql + ' select 1 else select 0')--result
/*-----------
1(所影响的行数为 1 行)
*/
就表示该字符在另一个字符的范围内,否则不在