Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

305
Visualizações
¿Cómo se puede usar 'regexp_replace ()' para reemplazar desde la posición inicial hasta la posición final en PostgreSQL?

He dado 'THOMAS,RANJAN,JDJDJDJ,OOOO'

Quiero enmascarar el 1er 3er 4to carácter con x en Postgres

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Si desea que el reemplazo ocurra para las cuatro partes separadas por comas, puede usar algo como esto:

 WITH mytable(mystring) AS (SELECT 'THOMAS,RANJAN,JDJDJDJ,OOOO'::text) SELECT string_agg( overlay( overlay( ap placing 'x' from 1 for 1 ) placing 'xx' from 3 for 2 ), ',' ) FROM mytable CROSS JOIN LATERAL unnest(string_to_array(mystring, ',')) a(p);

Eso resulta en

 ┌────────────────────────────┐ │ string_agg │ ├────────────────────────────┤ │ xHxxAS,xAxxAN,xDxxJDJ,xOxx │ └────────────────────────────┘ (1 row)

Si no necesita que el reemplazo ocurra para todas las partes, sino para toda la cadena, simplemente use las dos overlay y olvídese del resto.

over 4 years ago · Santiago Trujillo Relatório

0

También puede usar expresiones regulares. Una expresión regular para obtener los lugares de inserción (donde debería estar x) y otra para obtener el resto de subcadenas (donde el texto debería permanecer intacto).

Lo siguiente debería funcionar también para cadenas más cortas.

SELECT test.replace_string_134('THOMAS,RANJAN,JDJDJDJ,OOOO,b,bl,bla');

rendimiento: xHxxAS,xAxxAN,xDxxJDJ,xOxx,x,xl,xlx

Publico esto como una muestra alternativa, pero en cuanto al rendimiento, puede seguir la respuesta de @LaurenzAlbe.

 CREATE SCHEMA test; CREATE OR REPLACE FUNCTION test.replace_string_134 (TEXT) RETURNS TEXT AS $$ DECLARE input_text ALIAS FOR $1; BEGIN RETURN ( SELECT STRING_AGG( CASE WHEN tgroup.txt_group[1] <> '' THEN 'x' ELSE '' END || trest.txt_rest[1] || CASE WHEN tgroup.txt_group[2] <> '' THEN 'x' ELSE '' END || CASE WHEN tgroup.txt_group[3] <> '' THEN 'x' ELSE '' END || trest.txt_rest[2], ',') FROM ( SELECT txt_group, ROW_NUMBER() OVER () AS txt_index FROM regexp_matches(input_text, '[,]?([^,])[^,]?([^,]?)([^,]?)[^,]*[,]?', 'g') AS txt_group ) AS tgroup INNER JOIN ( SELECT txt_rest, ROW_NUMBER() OVER () AS txt_index FROM regexp_matches(input_text, '[,]?[^,]([^,]?)[^,]?[^,]?([^,]*)[,]?', 'g') AS txt_rest ) AS trest ON trest.txt_index = tgroup.txt_index ); END $$ LANGUAGE plpgsql; SELECT test.replace_string_134('THOMAS,RANJAN,JDJDJDJ,OOOO,b,bl,bla'); DROP SCHEMA test CASCADE;
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda