soundex

08/01/2008 - 21:34 por Imac_man | Informe spam
Hola,

Necesito hacer un query con soundex pero sobre un campo que almacena mas de
una palabra, por ejemplo soundex de un nombre completo. como lo puedo hacer
si el soundex solo funciona con una palabra.

lo que necesito que funcione es algo asi:
soundex('juan antonio melgarejo perez') = soundex('mlgarrejo')

gracias de antemano

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
09/01/2008 - 13:30 | Informe spam
On 8 jan, 21:34, "Imac_man" wrote:
Hola,

Necesito hacer un query con soundex pero sobre un campo que almacena mas de
una palabra, por ejemplo soundex de un nombre completo. como lo puedo hacer
si el soundex solo funciona con una palabra.

lo que necesito que funcione es algo asi:
soundex('juan antonio melgarejo perez') = soundex('mlgarrejo')

gracias de antemano



Lo primero que se me ocurre es crear un función que recorra
todas las palabras y devuelva 0 si no encuentra ninguna
palabra con el mismo soundex de otra palabra dada, o 1
si sí la encuentra.

Depués puedes hacer algo como:
dbo.fn_soundexN('juan antonio melgarejo perez', 'mlgarrejo') = 1

Aquí la tienes la función:


CREATE FUNCTION fn_soundexN ( @S VARCHAR(1000), @SND VARCHAR(100))
RETURNS BIT AS
BEGIN

DECLARE @P INT, @W VARCHAR(100)

SET @SND=SOUNDEX(@SND)

SET @S = LTRIM(RTRIM(@S))

WHILE @S <> ''
BEGIN
SET @P = CHARINDEX(' ', @S)
IF @P = 0
BEGIN
SET @W = SUBSTRING(@S, 1, LEN(@S))
SET @S = ''
END
ELSE
BEGIN
SET @W = SUBSTRING(@S, 1, @P - 1)
SET @S = LTRIM(RIGHT(@S, LEN(@S) - @P))
END

IF SOUNDEX(@W) = @SND
RETURN 1

END

RETURN 0
END


Saludos,
Carlos
Respuesta Responder a este mensaje
#2 Carlos M. Calvelo
09/01/2008 - 15:30 | Informe spam
On 9 jan, 13:30, "Carlos M. Calvelo" wrote:
...
      BEGIN
         SET @W = SUBSTRING(@S, 1, LEN(@S))
...



Ui! Que tontería! SUBSTRING(@S, 1, LEN(@S)) es @S.

Aquí te dejo la función otra vez, un poco mas compacta.

Saludos,
Carlos

CREATE FUNCTION fn_SOUNDEXN (@S VARCHAR(1000), @SND VARCHAR(100))
RETURNS BIT AS
BEGIN
DECLARE @P INT

SET @SND=SOUNDEX(@SND)
SET @S = LTRIM(RTRIM(@S))
WHILE @S <> ''
BEGIN
SET @P = CHARINDEX(' ', @S)
IF @P = 0
BEGIN
IF SOUNDEX(@S) = @SND RETURN 1
SET @S = ''
END
ELSE
BEGIN
IF SOUNDEX(LEFT(@S, @P - 1)) = @SND RETURN 1
SET @S = LTRIM(RIGHT(@S, LEN(@S) - @P))
END
END
RETURN 0
END
Respuesta Responder a este mensaje
#3 Alfredo Novoa
10/01/2008 - 13:03 | Informe spam
On Tue, 8 Jan 2008 14:34:25 -0600, "Imac_man"
wrote:

Necesito hacer un query con soundex pero sobre un campo que almacena mas de
una palabra, por ejemplo soundex de un nombre completo. como lo puedo hacer
si el soundex solo funciona con una palabra.



Pues eliminando los espacios, obviamente :-)

Yo pensaba que el algoritmo ya los eliminaba automáticamente.

lo que necesito que funcione es algo asi:
soundex('juan antonio melgarejo perez') = soundex('mlgarrejo')



Otro problema es que las dos cadenas sean demasiado diferentes como
para que el algoritmo las identifique como parecidas.

Tambien puedes usar la función Difference en lugar de Soundex


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