Saltar al contenido

Cómo reemplazar múltiples caracteres especiales en Postgres 9.5

La guía o código que encontrarás en este post es la solución más eficiente y efectiva que hallamos a esta inquietud o problema.

Solución:

No, no hay esta función. Probablemente no sea demasiado difícil escribir una extensión C optimizada para lo que lo hace. Pero el lenguaje C no siempre es necesario. Puede probar la función SQL o PLpgSQL:

CREATE OR REPLACE FUNCTION xx(text, text[], text[])
RETURNS text AS $$
   SELECT string_agg(coalesce($3[array_position($2, c)],c),'')
      FROM regexp_split_to_table($1,'') g(c)
$$ LANGUAGE sql;

postgres=# select xx('Jürgen', ARRAY['ä','ü'], ARRAY['ae','ue']);
┌─────────┐
│   xx    │
╞═════════╡
│ Juergen │
└─────────┘
(1 row)

En mi compilación, realiza 6000 transformaciones en menos de 200 ms (pero tengo una compilación de desarrollador de PostgreSQL, es más lenta).

reemplazar()

Si solo desea reemplazar uno o algunos caracteres, puede usar la función reemplazar (string texto, de texto a texto) que reemplaza todas las apariciones en string subcadena. La función de reemplazo se puede usar para reemplazar un carácter por varios caracteres.

traducir()

Si desea traducir algunas letras a otras letras, puede traducir la función de usuario (string texto, de texto a texto) que reemplaza cualquier carácter en un string que coincide con un carácter en el de por el carácter correspondiente en el conjunto.

Algunos datos para jugar:

drop table if exists xyz;

create table xyz (
    id serial not null,
    name varchar(30)
);

insert into xyz (name) values
    ('Juhänäo'),
    ('Jürgüen'),
    ('Dannäu'),
    ('Übüdyr');

Ejemplo de función de reemplazo:

select replace(name, 'ä', 'a') from xyz;

Esta función reemplaza la letra ä en la columna de nombre con la letra a. Juhänäo se convierte en Juhanao.

select replace(name, 'ä', 'ae') from xyz;

Ahora reemplaza la letra ä con ae.

select replace(replace(replace(name, 'ä', 'ae'), 'ü', 'ue'), 'Ü', 'Ue') from xyz;

No es muy agradable, pero en el ejemplo todas las ä se convierten en ae, ü se convierten en ue y Ü se convierten en ‘Ue’.

update xyz set name = replace(replace(replace(name, 'ä', 'ae'), 'ü', 'ue'), 'Ü', 'Ue');

Cambia letras y actualiza filas. El resultado de la actualización es el siguiente:

Juhaenaeo
Juergueen
Dannaeu
Uebuedyr

Ejemplo de función de traducción:

select translate(name, 'ä,ü,Ü', 'a,u,U') from xyz;

Traduce todas las letras ä a a, ü a u y Ü a U.

update xyz set name = translate(name, 'ä,ü,Ü', 'a,u,U');

Actualiza la tabla para que todas las letras predefinidas se traduzcan y el cambio se guarde en la base de datos. El resultado de la actualización es el siguiente:

Juhanao
Jurguen
Dannau
Ubudyr

Más información:

Reemplazar caracteres con cadenas de varios caracteres

postgresql string funciones

valoraciones y comentarios

Si te mola el tema, puedes dejar una reseña acerca de qué te ha impresionado de esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *