Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

478
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!