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

495
Visualizações
¿Escape el guión bajo '_' en la función de ajuste () de PostgreSQL?

¿Cómo escapar del guión bajo '_' en la función trim() de PostgreSQL?

Intento eliminar 'vt_' del comienzo del texto (por ejemplo 'vt_test' ) usando la función trim() :

 select trim(leading 'vt_' from 'vt_test'); select ltrim('vt_test', 'vt_'); select ltrim('vt_test', 'vt\_'); select ltrim('vt_test', 'vt\\_');

Devoluciones:

 est

Pero me gustaría obtener:

 test

Puedo hacerlo usando replace() pero me gustaría saber por qué trim() no funciona.

Probado en Postgres 12 y 11.

RESUMEN

  1. La función trim elimina todas las instancias iniciales de los caracteres enumerados; el orden de los caracteres no importa. Obtienes el mismo resultado usando trim(leading '_tv' from 'vt_test') .
  2. Creo que la mejor solución es usar select regexp_replace('vt_test', '^vt_', '') porque solo quiero eliminar esta cadena inicial solo si vt_ existe al principio (lo siento, pero no no lo mencione antes).

¡Gracias a_horse_with_no_name , Mureinik y Erwin Brandstetter por su ayuda!

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

0

trim() funciona como se esperaba: elimina todas las instancias principales de los caracteres enumerados. el manual :

trim([principal | final | ambos] [caracteres] de la cadena)

Elimine la cadena más larga que contenga solo caracteres de los characters (un espacio predeterminado) desde el principio, el final o ambos extremos ( both son los valores predeterminados) de la string

Entonces se elimina vt_t , no solo vt_ .

El problema no está relacionado con el guión bajo _ , que no tiene un significado especial en este contexto.

La alternativa más rápida para la tarea en particular:

 SELECT right('vt_test', -3);
over 4 years ago · Santiago Trujillo Relatório

0

El problema aquí no es escapar, ltrim es simplemente la herramienta incorrecta para el trabajo. De acuerdo con la documentación, esta función se

Elimine la cadena más larga que contenga solo caracteres de los caracteres (un espacio por defecto) desde el inicio de la cadena.

Puede usar regexp_replace para obtener el efecto deseado:

 select regexp_replace('vt_test', '^vt_', '')
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