我需要编写一个SQL Server函数,它将接收两个字段并以这种方式执行逻辑操作
- 取第一个字段值,将其拆分为单词
- 确保所有这些单词都存在于第二个字段中。
例如:le chien
的第一个字段,第二个字段是le chien joue avec la balle
在这种情况下,该函数将返回true,因为第一个中的所有单词都在第二个单词中。
我可以简单地使用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)
,则即使字符串不匹配也会返回true。
在某些情况下,字符数量的增加会起作用,但在其他情况下不会起作用。所以这一切都归结为编写一个函数,将第一个字符串拆分为单独的单词并确保它们全部存在于第二个字符串中。
有人可以帮助我建立一个功能或指向正确的方向吗?我真的很感激任何帮助
答案 0 :(得分:1)
如果要查看value2中是否存在value1,可以使用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
答案 1 :(得分:0)
您可以检查以下解决方案是否符合您的要求
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