Попробуйте это ... Функция StringSorter разбивает строки на пробел, а затем сортирует все слова и помещает строку обратно в отсортированный порядок слов.
CREATE FUNCTION dbo.StringSorter(@sep char(1), @s varchar(8000))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @ResultVar varchar(8000);
WITH sorter_cte AS (
SELECT CHARINDEX(@sep, @s) as pos, 0 as lastPos
UNION ALL
SELECT CHARINDEX(@sep, @s, pos + 1), pos
FROM sorter_cte
WHERE pos > 0
)
, step2_cte AS (
SELECT SUBSTRING(@s, lastPos + 1,
case when pos = 0 then 80000
else pos - lastPos -1 end) as chunk
FROM sorter_cte
)
SELECT @ResultVar = (select ' ' + chunk
from step2_cte
order by chunk
FOR XML PATH(''));
RETURN @ResultVar;
END
GO
Вот тестовый пример, который просто пробуетфункция:
SELECT dbo.StringSorter(' ', 'the quick brown dog jumped over the lazy fox');
, которая дала следующие результаты:
brown dog fox jumped lazy over quick the the
Затем, чтобы запустить его из оператора выбора, используя ваши строки
SELECT case when dbo.StringSorter(' ', 'my word') =
dbo.StringSorter(' ', 'word my')
then 'Equal' else 'Not Equal' end as ResultCheck
SELECT case when dbo.StringSorter(' ', 'my word') =
dbo.StringSorter(' ', 'aaamy word')
then 'Equal' else 'Not Equal' end as ResultCheck
Первый показываетчто они равны, а второе - нет.
Это должно делать именно то, что вы ищете, с помощью простой функции, использующей рекурсивный CTE для сортировки вашей строки.
Наслаждайтесь!