Ответ был получен / принят, прежде чем я смог опубликовать, и то, что написал @ sugar2Code, - это то, как я это сделаю.
Тем не менее, мне было неясно, хотели ли вы, чтобы первая и фамилия были похожими или только одна из них. То, что я собрал, позволит вам решить, используя параметр.
-- Sample Data
DECLARE @t TABLE (CustomerName VARCHAR(30))
INSERT @t VALUES('Johny Smith'),('Freddie Roach'),('Mr. Smithers'),('Johnathan Smithe');
-- User Arguments
DECLARE
@name VARCHAR(30) = 'John Smith',
@partialmatch BIT = 1;
-- Dynamic Solution
SELECT
t.CustomerName,
FNMatch = SIGN(pos.F),
LNMatch = SIGN(pos.L)
FROM @t AS t
CROSS JOIN
(
SELECT SUBSTRING(@name,1,f.Mid-1), SUBSTRING(@name,f.Mid+1,8000)
FROM (VALUES(CHARINDEX(' ',@name))) AS f(Mid)
) AS f(FName,LName)
CROSS APPLY (VALUES (CHARINDEX(f.FName,t.CustomerName), CHARINDEX(f.LName,t.CustomerName))) AS pos(F,L)
WHERE (@partialmatch = 0 AND pos.F*pos.L > 0)
OR (@partialmatch = 1 AND pos.F+pos.L > 0);
Когда @partialmatch = 1, вы получаете:
CustomerName FNMatch LNMatch
------------------------------ ----------- -----------
Johny Smith 1 1
Mr. Smithers 0 1
Johnathan Smithe 1 1
Установка @partialMatch в 0 исключит «Мистер Смитерс».