T-SQL 中的逐字字符串比较函数

Function for word by word string comparison in T-SQL

我需要编写一个 SQL 服务器函数,它将接受两个字段并以这种方式执行逻辑操作
- 获取第一个字段值,将其拆分为单词
- 确保所有这些词都存在于第二个字段中。

例如:第一个字段为le chien,第二个字段为le chien joue avec la balle 在这种情况下,该函数将 return 为真,因为第一个单词中的所有单词都在第二个单词中。

我可以简单地使用 SUBSTRING:

SUBSTRING(field1, 0, 5)=SUBSTRING(field2, 0,5)

但在某些情况下是行不通的;如果我有 field1 作为 la maison (1)field2 作为 la maison (2) SUBSTRING(field1, 0, 5)=SUBSTRING(field2, 0,5) 将 return true 即使字符串不匹配。

在某些情况下增加字符数会奏效,但在其他情况下则行不通。所以这一切都归结为编写一个函数,将第一个字符串拆分为单独的单词,并确保所有单词都存在于第二个字符串中。

有人可以帮我构建一个功能或为我指明正确的方向吗?我真的很感激任何帮助

如果要查看value1 是否存在于value2 中,可以使用CHARINDEX。 https://msdn.microsoft.com/en-us/library/ms186323.aspx

IF CHARINDEX(value1, value2) > 0  --found

如果值 1 中的单词可以在值 2 中按任意顺序排列,那么您可以使用 JamesZ 在您的问题中链接到的拆分函数。将该函数添加到数据库后,您可以使用

IF EXISTS(SELECT  * 
          FROM    dbo.DelimitedSplit8K(@value1, ' ')
          WHERE CHARINDEX(item, @value2 ) = 0) -- not found

您能否检查以下解决方案是否符合您的要求

http://www.sqlservercentral.com/blogs/querying-microsoft-sql-server/2013/09/19/how-to-split-a-string-by-delimited-char-in-sql-server/

CREATE FUNCTION [dbo].[fnSplitString] 
( 
    @string NVARCHAR(MAX), 
    @delimiter CHAR(1) 
) 
RETURNS @output TABLE(splitdata NVARCHAR(MAX) 
) 
BEGIN 
    DECLARE @start INT, @end INT 
    SELECT @start = 1, @end = CHARINDEX(@delimiter, @string) 
    WHILE @start < LEN(@string) + 1 BEGIN 
        IF @end = 0  
            SET @end = LEN(@string) + 1

        INSERT INTO @output (splitdata)  
        VALUES(SUBSTRING(@string, @start, @end - @start)) 
        SET @start = @end + 1 
        SET @end = CHARINDEX(@delimiter, @string, @start)

    END 
    RETURN 
END


----Select Statement
SELECT a.splitdata
INTO #firstSet
FROM fnSplitString('le chien', ' ') a

SELECT b.splitdata
INTO #secondSet
FROM fnSplitString('le joue avec la balle', ' ') b

DELETE a 
FROM #firstSet a
JOIN #secondSet b ON a.splitdata = b.splitdata

SELECT * FROM #firstSet


http://sqlfiddle.com/#!6/c5035