Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

481
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda