Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/01/2007, 07:00
Avatar de PosProdukcion
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));