Soundex

31/10/2003 - 12:01 por Manuel Madrigal | Informe spam
Hola a todos:

Mi pregunta es muy sencilla, ¿Hay alguna forma de buscar un registro de
una tabla que contenga una palabra exacta o parecida?

Un ejemplo:
Si busco en una tabla de artículos un teclado mecánico, con acento, y
escribo en la búsqueda solo mecanico, es decir, todos los artículos que
contengan la palabra mecánico y mecanico.

Con soundex, solo me compara la primera palabra y yo necesitaría que
fuese cualquier palabra del campo:

select codArticulo, descripcion from Articulos Where soundex(descripcion)
like soundex('mecanico')

Muchas gracias y un saludo.

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
31/10/2003 - 12:14 | Informe spam
Pero eso ya lo tienes con LIKE (y el carácter comodín %) y con las
diferentes intercalaciones (no distinguir palabras con acentos y sin ellos,
no distinguir entre mayúsculas y minúsculas...) SOUNDEX no está pensado
para lo que tú dices, sino únicamente para palabras similares (por ejemplo
SELECT SOUNDEX ('baca'), SOUNDEX ('vaca') )



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)
MVP SQL Server
Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Manuel Madrigal" escribió en el mensaje
news:
Hola a todos:

Mi pregunta es muy sencilla, ¿Hay alguna forma de buscar un registro


de
una tabla que contenga una palabra exacta o parecida?

Un ejemplo:
Si busco en una tabla de artículos un teclado mecánico, con acento, y
escribo en la búsqueda solo mecanico, es decir, todos los artículos que
contengan la palabra mecánico y mecanico.

Con soundex, solo me compara la primera palabra y yo necesitaría que
fuese cualquier palabra del campo:

select codArticulo, descripcion from Articulos Where soundex(descripcion)
like soundex('mecanico')

Muchas gracias y un saludo.


Respuesta Responder a este mensaje
#2 Manuel Madrigal
31/10/2003 - 12:33 | Informe spam
Hola,

A eso también me refería, no solo buscar acentos y mayúsculas y
minúsculas, sino también b y v, j y g, y que la palabra esté en cualquier
posición.
Respuesta Responder a este mensaje
#3 Javier Loria
31/10/2003 - 14:26 | Informe spam
Manuel:
SOUNDEX hace lo que quieres, pero solo con palabras no con frases.
Revisa este codigo:
SELECT SOUNDEX('Cabeza'),
SOUNDEX('Caveza')

SELECT SOUNDEX('Pajaro'),
SOUNDEX('Pájaro'),
SOUNDEX('Pagaro')

SELECT SOUNDEX('Vaca'),
SOUNDEX('Vacha'),
SOUNDEX('Vaka')

Si quieres hacerlo sobre una frase, o descripcion tendrias que "normalizar"
las palabras o concatenar los SOUNDEX de cada palabra de la frase.
Otra alternativa es escribir tu propia version, ya que el SOUNDEX
implementa el algoritmo de Rusell que esta disenado para APELLIDOS y
funciona mejor con los apellidos en INGLES/Europeos. Un algoritmo propio
podria adaptarse mejor a tus necesidades.
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.

Manuel Madrigal escribio:
Hola,

A eso también me refería, no solo buscar acentos y mayúsculas y
minúsculas, sino también b y v, j y g, y que la palabra esté en
cualquier posición.
Respuesta Responder a este mensaje
#4 Miguel Egea
31/10/2003 - 14:35 | Informe spam
Lo más parecido que yo conozco son los fulltext search que conjugan verbos y
esas cosas.

Revisa las instrucciones contains y freetext y si tienes alguna pega, pues
aquí estamos ;-)

Saludos
Miguel Egea

"Manuel Madrigal" escribió en el mensaje
news:#
Hola,

A eso también me refería, no solo buscar acentos y mayúsculas y
minúsculas, sino también b y v, j y g, y que la palabra esté en cualquier
posición.


Respuesta Responder a este mensaje
#5 Manuel Madrigal
31/10/2003 - 19:00 | Informe spam
Hola de nuevo:

Para intentar subsanar el problema, he diseñado una función en vb6 que
medio me sirve. No busca las palabras parecidas pero al menos sí las que
tienen error ortográfico.

Esta es la función:

Function CrearLike(Cadena As String) As String
Dim TMP As String
Dim n As Long
' Recorremos la cadena
For n = 1 To Len(Cadena)
' Seleccionamos la letra de la cadena en mayúsculas
' y añadimos para cada letra sustituible su patrón de búsqueda
Select Case Mid$(UCase$(Cadena), n, 1)
Case "B", "V"
TMP = TMP & "[bvBV]"
Case "G", "J"
TMP = TMP & "[gjGJ]"
Case "A", "Á"
TMP = TMP & "[aáAÁ]"
Case "E", "É"
TMP = TMP & "[eéEÉ]"
Case "I", "Í"
TMP = TMP & "[iíIÍ]"
Case "O", "Ó"
TMP = TMP & "[oóOÓ]"
Case "U", "Ú"
TMP = TMP & "[uúUÚ]"
' Para el resto de letras, añadirlas sin mas
Case Else
TMP = TMP & Mid$(Cadena, n, 1)
End Select
Next n
' Devolver el resultado
CrearLike = TMP
End Function

Y como no, he aquí la pregunta: ¿Como hago lo mismo para la Y y la LL?
También os pediría opinión acerca de la función: ¿la veis políticamente
correcta?

Un saludo y muchas gracias.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida