用charindex的话只能找出连续的字符.比如:
select charindex(','+'1,2'+',',','+'1,2,3,4,5,6'+',')
如果我想找出字符串1,2,3,4,5,6中的1,5,代码如下
select charindex(','+'1,5'+',',','+'1,2,3,4,5,6'+',')
这样就找不出来了.像这种情况如何处理?用什么函数?谢谢!要达到的目的就是在字符串中1,2,3,4,5,6中字符1,5都是"存在"的.

解决方案 »

  1.   

    这是邹老大的代码:出自:
    http://bbs.csdn.net/topics/70309524--处理函数 
    CREATE FUNCTION f_comp 
        ( 
          @str1 VARCHAR(8000) , 
          @str2 VARCHAR(8000) 
        ) 
    RETURNS INT
    AS 
        BEGIN
            DECLARE @i INT
            SELECT  @i = 0 , 
                    @str1 = ',' + @str1 + ','
            WHILE CHARINDEX(',', @str2) > 0  
                SELECT  @i = @i 
                        + CASE WHEN CHARINDEX(',' + LEFT(@str2, 
                                                         CHARINDEX(',', @str2) - 1) 
                                              + ',', @str1) > 0 THEN 1 
                               ELSE 0 
                          END , 
                        @str2 = STUFF(@str2, 1, CHARINDEX(',', @str2), '') 
            SET @i = @i + CASE WHEN CHARINDEX(',' + @str2 + ',', @str1) > 0 THEN 1 
                               ELSE 0 
                          END
            RETURN(@i) 
        END
    go 
      
    --调用 
    SELECT  dbo.f_comp('1,2,3,4,5', '1,3,4,6') 
    go 
      
    DROP FUNCTION f_comp
      

  2.   


    这个不行吧.
    如果是SELECT  dbo.f_comp('1,2,3,4,5', '1,6') 
    得出的还是个大于0的.
    现在结果需要的是"1,6" 是不存在"1,2,3,4,5"中的.
      

  3.   

    select a.number from(
    select number from master..spt_values where type='p' and charindex(','+convert(varchar,number)+',',','+'1,5'+',')>0
    )a inner join (
    select number from master..spt_values where type='p' and charindex(','+convert(varchar,number)+',',','+'1,2,3,4,5,6'+',')>0
    )b on a.number=b.number
    /*
    number
    -----------
    1
    5(2 行受影响)*/