comparar string

30/09/2004 - 16:31 por rogercba | Informe spam
Grupo,

Los molesto porque tengo que comparar dos columnas de una
tabla de tipo varchar y la comparacion debe ser caracter
por caracter y sin importar el orden de los caracteres.
por ej:

'TTAA...###' = '##..TATA.#'

Estos dos valores son iguales porque tienen los mismos
caracteres.

Como se puede hacer para comparar estas dos columnas y que
el resultado me de que son iguales??

Desde ya muchas gracias.

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera [MVP]
30/09/2004 - 16:39 | Informe spam
Yo me olvidaría por un momento de las funciones disponibles en SQL y me
concentraría solamente en pensar el algoritmo que resuelva ese problema.
Logrado eso, después me plantearía cómo implementarlo.

Simplemente mi aporte de 2 centavitos :-)

Gustavo Larriera, MVP
Uruguay LatAm
http://sqljunkies.com/weblog/gux/
Este mensaje se proporciona "COMO ESTA" sin garantias y no otorga ningun
derecho / This posting is provided "AS IS" with no warranties, and confers
no rights.
"rogercba" wrote in message
news:22a501c4a6fa$33bf5af0$
Grupo,

Los molesto porque tengo que comparar dos columnas de una
tabla de tipo varchar y la comparacion debe ser caracter
por caracter y sin importar el orden de los caracteres.
por ej:

'TTAA...###' = '##..TATA.#'

Estos dos valores son iguales porque tienen los mismos
caracteres.

Como se puede hacer para comparar estas dos columnas y que
el resultado me de que son iguales??

Desde ya muchas gracias.


Respuesta Responder a este mensaje
#2 Javier Loria
01/10/2004 - 04:54 | Informe spam
Hola:
Una solucion orientada a conjuntos, aunque no necesariamente la mas
eficiente.
Si partimos del siguiente esquema:
CREATE TABLE Demo(
Id INT
NOT NULL PRIMARY KEY
, Columna1 VARCHAR(10) NOT NULL
, Columna2 VARCHAR(10) NOT NULL
)

CREATE TABLE Numeros(
Numero INT NOT NULL PRIMARY KEY
)

INSERT Demo(Id, Columna1, Columna2
SELECT 1, 'TTAA...###','##..TATA.#' UNION ALL
SELECT 2, 'DTBA...###','##..TADA.#'

INSERT Numeros(Numero)
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5

INSERT Numeros(Numero)
SELECT Numero+5 FROM Numeros

INSERT Numeros(Numero)
SELECT Numero+10 FROM Numeros
Usamos una tabla de ayuda que llamamos numeros. Entonces para
"simplificar" podemos crear 2 vistas, aunque tambien podriamos usar
subconsultas.
CREATE VIEW DemoColumna1
AS
SELECT Id
, SUBSTRING(Columna1, Numeros.Numero,1) AS Letra
, COUNT(*) AS Numero
FROM Demo
JOIN Numeros
ON LEN(Demo.Columna1)>=Numeros.Numero
GROUP BY ID, SUBSTRING(Columna1, Numeros.Numero,1)

GO
CREATE VIEW DemoColumna2
AS
SELECT Id
, SUBSTRING(Columna2, Numeros.Numero,1) AS Letra
, COUNT(*) AS Numero
FROM Demo
JOIN Numeros
ON LEN(Demo.Columna2)>=Numeros.Numero
GROUP BY ID, SUBSTRING(Columna2, Numeros.Numero,1)
Estas 2 vistas usan la tabla de ayuda (numeros) para dividir en filas
las columnas1/2 de manera que cada fila tiene una letra, pero luego se
cuenta la cantidad de veces que aparece dicha letra en la columna.
Basado en estas dos vistas puede hacer la siguente consulta, que te da
los ID's de las columnas que no son iguales:
SELECT DISTINCT COALESCE(DemoColumna1.Id, DemoColumna2.Id) AS ID
FROM DemoColumna1
FULL OUTER JOIN DemoColumna2
ON DemoColumna1.Id=DemoColumna2.Id
AND DemoColumna1.Letra=DemoColumna2.Letra
WHERE COALESCE(DemoColumna1.Numero,0)<>COALESCE(DemoColumna2.Numero,0)
Esto codigo deberias documentarlo bien porque despues es dificil
entender la logica.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"rogercba" wrote in message
news:22a501c4a6fa$33bf5af0$
Grupo,

Los molesto porque tengo que comparar dos columnas de una
tabla de tipo varchar y la comparacion debe ser caracter
por caracter y sin importar el orden de los caracteres.
por ej:

'TTAA...###' = '##..TATA.#'

Estos dos valores son iguales porque tienen los mismos
caracteres.

Como se puede hacer para comparar estas dos columnas y que
el resultado me de que son iguales??

Desde ya muchas gracias.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida