比较SQL逗号分隔的字符串(Compare comma delimited strings in S

2019-08-18 04:06发布

我有来,在CDL搜索请求("1,2,3,4") ("1,5") 我需要比较的是另一个CDL,并返回有符合所有记录。 踢球是每个数字的位置并不总是相同的。

我已经得到的东西,除了在那里我想匹配的实例几乎工作("2,5")("2,4,5") 显然,字符串是不相等的,但我需要回到那场比赛,因为它在第一CDL所有的值。

我的SQL小提琴应该让相当清楚...

任何帮助将非常感激。

哦,我看到这一个是类似的,但似乎有点激烈,在我的头上,但我会看看我能不能试着去了解它。

编辑
所以,我只是做了更换,以改变("2,5")("%2%5%")改变了人使用LIKE 。 从我可以告诉最初它似乎是工作.. SQL小提琴的任何理由,我不应该这样做也许我疯了,并没有在所有的工作?

Answer 1:

只需一步,更接近你的答案。
SQL FIDDLE DEMO


SELECT P.* 
FROM Product P
CROSS APPLY(
  SELECT *
  FROM ShelfSearch SS
  WHERE Patindex(char(37)+replace(ss.shelflist, ',',char(37))+char(37),p.shelflist) > 0
)Shelfs


Answer 2:

您可以将列表转换为与下面的函数表:

CREATE FUNCTION DelimitedStringToTable (@cdl varchar(8000), @delimiter varchar(1))
RETURNS @list table (
    Token varchar(1000)
)
AS
BEGIN

DECLARE @token varchar(1000)
DECLARE @position int

SET @cdl = @cdl + @delimiter -- tack on delimiter to end 
SET @position = CHARINDEX(@delimiter, @cdl, 1)
    WHILE @position > 0
        BEGIN
            SET @token = LEFT(@cdl, @position - 1)
            INSERT INTO @list (Token) VALUES (@token)
            SET @cdl = RIGHT(@cdl, DATALENGTH(@cdl) - @position)        
            SET @position = CHARINDEX(@delimiter, @cdl, 1)      
        END 
    RETURN
END

然后你可以使用这样的事情找到所有的比赛:

SELECT list1.* 
FROM DelimitedStringToTable('1,2,3', ',') list1
INNER JOIN DelimitedStringToTable('2', ',') list2 ON list1.Token = list2.Token


文章来源: Compare comma delimited strings in SQL