我有来,在CDL搜索请求("1,2,3,4")
("1,5")
我需要比较的是另一个CDL,并返回有符合所有记录。 踢球是每个数字的位置并不总是相同的。
我已经得到的东西,除了在那里我想匹配的实例几乎工作("2,5")
来("2,4,5")
显然,字符串是不相等的,但我需要回到那场比赛,因为它在第一CDL所有的值。
我的SQL小提琴应该让相当清楚...
任何帮助将非常感激。
哦,我看到这一个是类似的,但似乎有点激烈,在我的头上,但我会看看我能不能试着去了解它。
编辑
所以,我只是做了更换,以改变("2,5")
来("%2%5%")
改变了人使用LIKE
。 从我可以告诉最初它似乎是工作.. SQL小提琴的任何理由,我不应该这样做也许我疯了,并没有在所有的工作?
只需一步,更接近你的答案。
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
您可以将列表转换为与下面的函数表:
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