首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ltrim在postgres的意外行为

ltrim在postgres的意外行为
EN

Database Administration用户
提问于 2019-04-26 21:23:43
回答 1查看 60关注 0票数 3
代码语言:javascript
复制
select ltrim('Test Thing', 'Test ');

预期:“事情”

实际结果:“兴”

为什么“测试”中的“T”与“事物”中的“T”匹配?

EN

回答 1

Database Administration用户

发布于 2019-04-26 21:34:23

第二个参数是要修剪的字符列表,而不是字符串本身。

手册关于ltrim(string text [, characters text])

从字符串的开头删除只包含字符的最长字符串(默认情况下为空格)。

所以这个:

代码语言:javascript
复制
select ltrim('abc cab b ca foo', 'abc ');

..。只剩下“傻瓜”了。

要实际删除一个前导字符串“Test”:

代码语言:javascript
复制
SELECT regexp_replace('Test ThingTest ', '^Test ', '');

但是要更新表,通常情况下效率要高得多:

代码语言:javascript
复制
UPDATE tbl
SET    col = right(col, -5)  --  right(col, length('Test ') * -1)
WHERE  col LIKE 'Test %';

只有涉及相关行(重要!),才能在适当的地方使用索引(重要的是,如果一个大表中只有几行受到影响),而且表达式也更便宜。关于这个指数:

票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/236821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档