Provare questo ... La funzione StringSorter interrompe le stringhe su uno spazio e quindi ordina tutte le parole e rimette la stringa di nuovo insieme in ordine di parole ordinato.
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
Questo vuole essere un banco di prova solo cercando la funzione:
SELECT dbo.StringSorter(' ', 'the quick brown dog jumped over the lazy fox');
che ha prodotto questi risultati:
brown dog fox jumped lazy over quick the the
Poi, per eseguirlo da una dichiarazione prescelta utilizzando le corde
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
Il primo in e mostra che sono uguali, e il secondo no.
Questo dovrebbe fare esattamente quello che stai cercando con una semplice funzione che utilizza un CTE ricorsivo per ordinare la stringa.
Divertiti!
fonte
2012-05-04 00:56:16
1) che conta maiuscole e minuscole? molto probabilmente non ho pensato che avrei dovuto chiedere. 2) fare gli elementi ripetuti in un gruppo che esistono nell'altro conteggio come corrispondenza o no? Che significa "la mia parola" equivale a "parola mia parola"? –