probar este ... La función StringSorter rompe cadenas en un espacio y luego ordena todas las palabras y pone la cadena de nuevo juntos en el orden de palabras ordenada.
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
aquí es un caso de prueba sólo tratando a cabo la función:
SELECT dbo.StringSorter(' ', 'the quick brown dog jumped over the lazy fox');
que produjo los siguientes resultados:
brown dog fox jumped lazy over quick the the
Luego de ejecutarlo desde una instrucción de selección utilizando sus cuerdas
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
El primero en e muestra que son iguales, y el segundo no.
Esto debería hacer exactamente lo que está buscando con una función simple que utiliza un CTE recursivo para ordenar su cadena.
¡Disfrútalo!
1) que importa mayúsculas y minúsculas? lo más probable es que no, pero pensé que debería preguntar. 2) ¿los elementos repetidos en un grupo que existen en el otro cuentan como una coincidencia o no? Es decir, ¿"mi palabra" es igual a "palabra mi palabra"? –