这是一个函数,它使用分隔符将第一个字符串拆分为-
多个部分,并在第二个字符串中查找每个部分,1
如果找到所有部分,则返回,0
否则返回。
CREATE FUNCTION dbo.func(@str1 varchar(max), @str2 varchar(max))
RETURNS BIT
AS
BEGIN
DECLARE @pos INT, @newPos INT,
@delimiter NCHAR(1)
SET @delimiter = '-'
SET @pos = 1
SET @newPos = 0
WHILE (@newPos < LEN(@str1))
BEGIN
SET @newPos = CHARINDEX(@delimiter, @str1, @pos)
IF @newPos = 0
SET @newPos = LEN(@str1)+1
DECLARE @data2 NVARCHAR(MAX)
SET @data2 = SUBSTRING(@str1, @pos, @newPos-@pos)
IF CHARINDEX(@data2, @str2) = 0
RETURN 0
SET @pos = @newPos + 1
IF @newPos = 0
BREAK
END
RETURN 1
END
您可以将上述功能用于您的问题,如下所示:
SELECT model_id, product_id
FROM models
JOIN products
ON dbo.func(models.model_name, products.product_name) = 1
它不会很快,但我认为不存在快速解决方案,因为您的问题不允许索引。可能可以更改数据库结构以实现这一点,但具体如何做到这一点在很大程度上取决于您的数据是什么样的。