Kornfeld Eliyahu Peter
SQL глобально-и Oracle тоже очень плохо справляется со Строковой обработкой...
В вашем случае вы должны найти способ разделить имя вокруг пробелов, а затем сравнить, чтобы увидеть, есть ли повторяющиеся части...
(Учтите, что не все имена состоят только из двух частей - например, у меня их 3)
Код, который у вас есть, не имеет ничего общего с вашим требованием - если находит повторяющиеся значения в записях, а не внутри одного поля...
Итак, если вы не можете пропустить это требование - сделайте это в коде, а не в SQL (практически невозможно создать универсальный метод сравнения, когда вы это сделаете, вы обнаружите, что он очень плохо работает)...
-- РЕДАКТИРОВАТЬ
Вот некоторые SQL (не проверенные Oracle), которые могут разделить строку и создать таблицу, где каждая часть является строкой... Вы можете создать вызов функции на ее основе и проверить ее на наличие дубликатов с помощью стандартного SQL... Но будьте осторожны-у него очень плохая производительность...
DECLARE @NAME AS NVARCHAR(MAX) = 'jhon jhon terry perry'
DECLARE @NAME_PART TABLE
(
PART NVARCHAR(MAX)
)
DECLARE @CURVAL AS NVARCHAR(MAX)
DECLARE @ALLVALS AS NVARCHAR(MAX)
SET @ALLVALS = @NAME + ' '
WHILE LEN (@ALLVALS) > 0
BEGIN
SET @CURVAL = LEFT(@ALLVALS, CHARINDEX(' ', @ALLVALS) - 1)
INSERT INTO @NAME_PART SELECT @CURVAL
SET @ALLVALS = RIGHT(@ALLVALS, LEN(@ALLVALS) - CHARINDEX(' ', @ALLVALS) + 1)
END
SELECT * FROM @NAME_PART