有一个字符串A:【Q10003】
另外一个字符串B:【Q10001-Q10015,Q10023,Q10031】,代表从Q10001、Q10002、Q10003直到Q10015,同时还有Q10023和Q10031;其中连续的字符串用中横杠分隔,不连续的字符串用逗号分隔。现在我想判断字符串A是否在字符串B中,请教应该如何实现

解决方案 »

  1.   


    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))--虽然有点土
      

  2.   

    感谢回复!
    这是我给出的例子的解决方案,但实际情况下,我的字符串B可能不是例子所示,可能会是这样的
    【Q10001-Q10015,Q10017-Q10023,Q10031】
      

  3.   

    declare @a varchar(100)
    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 行)
    */
      

  4.   

    使用In或者Exists来查看返回的函数,如果返回的行数大于0
    就表示该字符在另一个字符的范围内,否则不在