如何在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年级进行测试。
摘要
- 函数
trim
删除列出的字符的所有前导实例-字符的顺序无关紧要。使用trim(leading '_tv' from 'vt_test')
- 我认为,最好的解决方案是使用
select regexp_replace('vt_test', '^vt_', '')
,因为我只想在vt_
一开始就存在的情况下删除这个前导字符串(很抱歉,我以前没有提到它(
感谢a_hors_with_no_name、Mureinik和Erwin 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_', '')