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

postgres 8.4 like problemas con tildes y eñes

Estas en el tema de postgres 8.4 like problemas con tildes y eñes en el foro de PostgreSQL en Foros del Web. hola amigos estoy haciendo un select select * from tabla where lower(campo) like '%medico%' y dentro de tabla tengo los siguientes registros Médico médico medico ...
  #1 (permalink)  
Antiguo 09/05/2013, 15:02
 
Fecha de Ingreso: abril-2013
Mensajes: 29
Antigüedad: 11 años
Puntos: 0
postgres 8.4 like problemas con tildes y eñes

hola amigos estoy haciendo un select

select * from tabla where lower(campo) like '%medico%'


y dentro de tabla tengo los siguientes registros
Médico
médico
medico

pero el resultado del select con like me devuelve unicamente el ultimo registro y no los tres, el mismo caso ocurre si tienen eñes los datos

la version del postgres es la 8.4 debian squeeze.

encoding UTF-8
collation es_SV_utf-8

pueden indicarme que debo corregir para que postgres sea capaz de buscar con like las palabras con tildes o eñes
  #2 (permalink)  
Antiguo 09/05/2013, 15:21
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: postgres 8.4 like problemas con tildes y eñes

Yo tengo algo parecido de esta forma:
Código SQL:
Ver original
  1. WHERE TRANSLATE(campo,'ÁÉÍÓÚáéíóú','AEIOUaeiou') ilike translate('%cadena a buscar%','ÁÉÍÓÚáéíóú','AEIOUaeiou')";

Te funciona bien siempre y cuando la tabla no sea muy grande.
Hacer uso de funciones para comparar campos, evita el uso de indices y hace que las consultas puedan ser muy lentas con muchos datos.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 11/05/2013, 11:00
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: postgres 8.4 like problemas con tildes y eñes


<saludos>
Una mejor solución sería montar una tabla de profesiones,
y a la tabla actual darle en vez de las descripciones los ids
de la tabla de profesiones, y en el formulario en donde imagino
actualmente se digita el valor o se escoje de un listado,
agregar los ids y que en la tabla donde se está haciendo
el query busque por el id elegido, así se evitan los problemas
que se tienen actualmente y aparte mejora la consulta
para el motor porque buscar por cadenas le demanda
más proceso a la bd
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #4 (permalink)  
Antiguo 16/05/2013, 03:41
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: postgres 8.4 like problemas con tildes y eñes

Cita:
Iniciado por vmoran Ver Mensaje
..que debo corregir para que postgres sea capaz de buscar con like las palabras con tildes o eñes
No es una incapacidad de postgresql, la cuestión es mejorar tu consulta.

Esta sería una solución mas amplia y permamente a la que te propone huesos52, porque contempla ñÑ, acentos sajones como latinos, diéresis (àáü...) etc,,

By applying a specific collation order to your select:
Código SQL:
Ver original
  1. SELECT *
  2. FROM Venue
  3. WHERE Name COLLATE Latin1_General_CI_AI LIKE '%medico%' COLLATE Latin1_General_CI_AI

The CI stands for "Case Insensitive" and AI for "Accent Insensitive".
__________________
BadProgrammerException!
  #5 (permalink)  
Antiguo 16/05/2013, 08:23
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: postgres 8.4 like problemas con tildes y eñes

Hola FiruzzZ... eso me suena a MySQL.
Acabo de hacer una prueba en postgresql y no me funciona de la forma como lo planteas.

Es probable que postgresql también soporte collate a nivel de consulta pero tu ejemplo no me ha funcionado.

Me saca error en la palabra collate.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 16/05/2013, 20:40
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: postgres 8.4 like problemas con tildes y eñes

Cierto, postgreSQL no permite este casteo de collate en un select, a menos no en el WHERE.
una buena solución podría ser una función que reemplace todos estas cuestión, bien genérica y útil para futuros proyectos

Código SQL:
Ver original
  1. SELECT * FROM tabla WHERE funcion(campo) LIKE/ILIKE '% %'

Incluso podés crear index que utilicen esta función y optimizar muuuucho las consultas sobre estas columnas
__________________
BadProgrammerException!

Etiquetas: as, dato, eñes, postgres, tabla, tildes
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 14:17.