Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Busquedas sin acentos

Estas en el tema de Busquedas sin acentos en el foro de SQL Server en Foros del Web. Buenos días a todos. Tengo este problema. Estoy con SQL Server 2005. En el buscador que hice, cuando pongo "pepe" me encuentra resultados en mayúsculas ...
  #1 (permalink)  
Antiguo 04/09/2006, 06:03
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Busquedas sin acentos

Buenos días a todos.
Tengo este problema. Estoy con SQL Server 2005.
En el buscador que hice, cuando pongo "pepe" me encuentra resultados en mayúsculas y minúsculas, pero en cambio, no con accentos.
Saben como puedo configurar, o de qué forma hacer la SELECT (mejor) para que me devuelva todo (mayusculas, minusculas, con accentos, sin accentos...)

Muchas gracias.
Un saludo!
__________________
..:: moNTeZIon ::..
  #2 (permalink)  
Antiguo 04/09/2006, 08:21
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Por cierto, olvidé comentar, las busquedas las hago con el LIKE
Código:
... WHERE Campo LIKE '%pepe%'
Gracias!
__________________
..:: moNTeZIon ::..
  #3 (permalink)  
Antiguo 05/09/2006, 14:33
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Necesitas cambiar el Collation de las tablas para hacerlas insensibles a los acentos (CI_AI, Case Insensitive, Accent Insensitive)
http://www.google.com.mx/search?hl=e...n+Google&meta=
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #4 (permalink)  
Antiguo 05/09/2006, 17:29
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Gracias por responder Mithrandir.
No creas que no he buscado y vi que se trataba de cambiar el COLLATE, pero no encontré la forma de aplicarlo dentro de la SECECT.
Me refieroa una especie de "... CONVERT(campo, COLLATE_CI_AI) AS campo ..."
No se si me estoy yendo por las ramas.. Digamos que tampoco quiero cambiar el COLLATE para todo el servidor o para la base de datos, sino unicamente para esta búsqueda en ese campo.
Se puede hacer algo así?
Gracias!
Un saludo.
__________________
..:: moNTeZIon ::..
  #5 (permalink)  
Antiguo 05/09/2006, 17:46
Avatar de PequeñoMauro  
Fecha de Ingreso: abril-2006
Ubicación: Lima - Perú
Mensajes: 600
Antigüedad: 18 años
Puntos: 3
Hola Montezion:
Bueno, en Oracle hay una función REPLACE(), la cual se puede utilizar, mas o menos asi:

SELECT REPLACE(nombre,'E','e') FROM CLIENTE

Una prueba, entonces todos te saldrian asi:
ALBeRTO
JUANeTe

etc....

He visto que SQL SERVER tiene una función parecida, REPLACE, no se si actua de la misma forma, pero quizás pueda ayudarte, he buscado, y me parece que la sintaxis es la misma. Es decir, REPLACE(cadena,cadena_a_buscar,cadena_a_reemplazar )

Ahora si lo usas para que te reemplace todos los acentos, no se, te puede servir.
Saludos
__________________
"Nada en mis manos traigo tan solo a tu cruz me aferro....."
  #6 (permalink)  
Antiguo 06/09/2006, 01:33
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Uff, así de pronto lo veo complicado. Debería hacer un replace por cada vocal con acento, algo como reemplazar todos estos caracteres: áéíóúÁÉÍÓÚ , eso son 10 replaces.
No se Mauro, eso es factible?
Por el momento he optado por la solución de cambiar el COLLATE de las columnas en las que busco y funciona correctamente. El tema es que he tenido que cambiarlo indefinidamente, y si estaba de una forma es porqué así debía estar. Eso no quita que yo pueda necesitar hacer una busqueda concreta, pero sin esa sensibilidad a los accentos.
Gracias amigos!
__________________
..:: moNTeZIon ::..
  #7 (permalink)  
Antiguo 06/09/2006, 08:06
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Cita:
Iniciado por moNTeZIon Ver Mensaje
Gracias por responder Mithrandir.
No creas que no he buscado y vi que se trataba de cambiar el COLLATE, pero no encontré la forma de aplicarlo dentro de la SECECT.
Me refieroa una especie de "... CONVERT(campo, COLLATE_CI_AI) AS campo ..."
No se si me estoy yendo por las ramas.. Digamos que tampoco quiero cambiar el COLLATE para todo el servidor o para la base de datos, sino unicamente para esta búsqueda en ese campo.
Se puede hacer algo así?
Gracias!
Un saludo.
Ejemplo... where con Case sensitive de tabla con Case Insensitive...
Código:
select campo_caracter
from mitabla
where campo_caracter collate  SQL_Latin1_General_CP1_CS_AS = @valor
  #8 (permalink)  
Antiguo 06/09/2006, 10:45
Avatar de moNTeZIon  
Fecha de Ingreso: enero-2005
Ubicación: Lliçà de Munt - BCN
Mensajes: 1.625
Antigüedad: 19 años, 3 meses
Puntos: 9
Ese pedazo de Andres95!
Eso era man. Y funciona de perlas. Muchas gracias.
Finalmente quedó algo así:
Código:
...WHERE Nombre1 COLLATE SQL_Latin1_General_CP1_CI_AI LIKE '%' + @Texto + '%'
  OR Nombre2 COLLATE SQL_Latin1_General_CP1_CI_AI LIKE '%' + @Texto + '%'
  OR Descripcion COLLATE SQL_Latin1_General_CP1_CI_AI LIKE '%' + @Texto + '%'
Un saludo, y gracias a todos.
__________________
..:: moNTeZIon ::..
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:45.