Если я правильно понимаю ваш вопрос, вы можете попробовать следующий подход.Вам нужно разделить текст поиска, используя STRING_SPLIT()
(или другую функцию, если вы не используете SQL Server 2016+), и подсчитать совпадения для каждой части разделенного текста.
Ввод:
CREATE TABLE #fakenames (
givenname varchar(100),
surname varchar(100),
streetaddress varchar(100)
)
INSERT INTO #fakenames
(givenname, surname, streetaddress)
VALUES
('Irene', 'Williams', '2835 Crestview Manor'),
('Denny', 'Wade', '885 Baker drive'),
('Denny', 'Reese', '129 Owagner Lane')
Заявление:
DECLARE @query varchar(max)
SET @query = 'Denny drive'
SELECT f.*
FROM #fakenames f
CROSS APPLY STRING_SPLIT(@query, ' ') s
GROUP BY f.givenname, f.surname, f.streetaddress
HAVING
SUM(CASE
WHEN (givenname LIKE '%' + s.[value] + '%') OR
(surname LIKE '%' + s.[value] + '%') OR
(streetaddress LIKE '%' + s.[value] + '%') THEN 1 ELSE 0 END
) = (SELECT COUNT(*) FROM STRING_SPLIT(@query, ' '))
Вывод:
---------------------------------
givenname surname streetaddress
---------------------------------
Denny Wade 885 Baker drive