在PostgreSQL trim()函数中转义下划线'_'?



如何在PostgreSQLtrim()函数中转义下划线'_'?

我尝试使用trim()函数从文本开头删除'vt_'(例如'vt_test'(

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

退货:

est

但我想得到:

test

我可以使用replace()做到这一点,但我想知道为什么trim()不起作用。

在12年级和11年级进行测试。

摘要

  1. 函数trim删除列出的字符的所有前导实例-字符的顺序无关紧要。使用trim(leading '_tv' from 'vt_test')
  2. 我认为,最好的解决方案是使用select regexp_replace('vt_test', '^vt_', ''),因为我只想在vt_一开始就存在的情况下删除这个前导字符串(很抱歉,我以前没有提到它(

感谢a_hors_with_no_nameMureinikErwin Brandstetter的帮助!

trim()按预期工作:它删除了所列字符的所有前导实例。手册:

trim(字符串中的[leading|trading|both][characters](

从开始、结束或两端删除仅包含characters(默认为空格(中字符的最长字符串(both是默认值(string

因此删除了vt_t,而不仅仅是vt_

该问题与下划线_无关,后者在本文中没有特殊含义。

特定任务的最快替代方案:

SELECT right('vt_test', -3);

这里的问题并没有逃脱,ltrim只是适用于该作业的错误工具。根据文件,该功能将

删除最长的字符串,该字符串仅包含字符串开头的字符中的字符(默认情况下为空格(。

您可以使用regexp_replace来获得所需的效果:

select regexp_replace('vt_test', '^vt_', '')

最新更新