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

Remplazar cadenas.

Estas en el tema de Remplazar cadenas. en el foro de Oracle en Foros del Web. Buenas tardes gente, verán tengo la siguiente sentencia, por ejemplo: select * from hve_personas where direccion like '%Í%' Bien, ¿Como podría hacer para que en ...
  #1 (permalink)  
Antiguo 05/01/2007, 04:44
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
Remplazar cadenas.

Buenas tardes gente, verán tengo la siguiente sentencia, por ejemplo:

select * from hve_personas where direccion like '%Í%'

Bien, ¿Como podría hacer para que en dirección me pille todo lo que hay tanto con Í como con I ? Y lo mismo para todas las letras vocales...

Quiero saber si hay alguna forma de hacer algo asi:

select * from hve_personas where replace(direccion, "áÁéÉíÍóÓúÚ", "aAeEiIoOuU") LIKE '%I%'

En fin, si pueden ayudarme se lo agradecería, saludos cordiales.
__________________
Charlie.
  #2 (permalink)  
Antiguo 09/01/2007, 07:00
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 20 años
Puntos: 9
Re: Remplazar cadenas.

Bueno, yo tenia esto hecho, igula no es muy eficiente (tarda mucho en compilar), pero hasta que tengamos algo mejor...

Esto que te pongo compararia las direcciones quitando los acentos (y en mi caso tambien las eñes) de las vocales tanto en la columna DIRECCION como en la variable con la que compares (NOMBRE)...

Código:
 Function QuitaCaracterKK(cadena varchar2) return varchar2 is
    retcad varchar2(2000);
  Begin
     --retcad := REPLACE(cadena, ' ', '');
    retcad := REPLACE(cadena, 'á', 'a');
    retcad := REPLACE(retcad, 'é', 'e');
    retcad := REPLACE(retcad, 'í', 'i');
    retcad := REPLACE(retcad, 'ó', 'o');
    retcad := REPLACE(retcad, 'ú', 'u');
    retcad := REPLACE(retcad, 'Á', 'A');
    retcad := REPLACE(retcad, 'É', 'E');
    retcad := REPLACE(retcad, 'Í', 'I');
    retcad := REPLACE(retcad, 'Ó', 'O');
    retcad := REPLACE(retcad, 'Ú', 'U');
    retcad := REPLACE(retcad, 'Ñ', 'N');
    retcad := REPLACE(retcad, 'ñ', 'n');
  
    --  REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
    --  REPLACE(REPLACE(REPLACE(REPLACE(cadena, 'á', 'a'), 'é', 'e'), 'í', 'i'), 'ó', 'o'), 'ú', 'u'), 'Á', 'A'), 'É', 'E'), 'Í', 'I'), 'Ó', 'O'), 'Ú', 'U'), 'Ñ', 'N'), 'ñ', 'n')
    return retcad;
  End;
Y luego, en el SELECT:

Código:
     Select count(*)
        into cuantas
        from hve_personas
       where UPPER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(direccion,
                                                                                                                   'á',
                                                                                                                   'a'),
                                                                                                           'é',
                                                                                                           'e'),
                                                                                                   'í',
                                                                                                   'i'),
                                                                                           'ó',
                                                                                           'o'),
                                                                                   'ú',
                                                                                   'u'),
                                                                           'Á',
                                                                           'A'),
                                                                   'É',
                                                                   'E'),
                                                           'Í',
                                                           'I'),
                                                   'Ó',
                                                   'O'),
                                           'Ú',
                                           'U'),
                                   'Ñ',
                                   'N'),
                           'ñ',
                           'n')) = UPPER(QuitaCaracterKK(Nombre));
  #3 (permalink)  
Antiguo 09/01/2007, 07:38
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 5 meses
Puntos: 7
Re: Remplazar cadenas.

Lo he solucionado de una forma más eficiente:
translate(UPPER(apellido1), 'ÁÉÍÓÚ', 'AEIOU') LIKE UPPER('%" + criterio + "%')
__________________
Charlie.
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 18:41.