psql LTRIM修剪我没有指定的字符

时间:2017-08-17 20:50:22

标签: python sql postgresql

我是psql的新手,我有一个我正在练习的sql文件。

如果我键入以下内容:

 select log.path from log where log.status not like '404 NOT FOUND';

我到达这里:

                path
------------------------------------
 /article/bears-love-berries
 /article/bad-things-gone
 /article/trouble-for-troubled
 /
 /article/bad-things-gone
 /article/so-many-bears
 /article/bears-love-berries
 /
 /article/bears-love-berries
 /article/so-many-bears
 /article/goats-eat-googles
 /article/trouble-for-troubled
 /
 /article/goats-eat-googles
 /
 /article/bad-things-gone
 /
 /article/media-obsessed-with-bears
 /article/bears-love-berries
 /article/candidate-is-jerk

我正在尝试修剪/结束/关闭结果。 如果我键入以下内容:

select ltrim(log.path, '/article/') from log where log.status not like '404 NOT FOUND';

结果如下:

           ltrim
---------------------------
 bears-love-berries
 bad-things-gone
 ouble-for-troubled

 bad-things-gone
 so-many-bears
 bears-love-berries

 bears-love-berries
 so-many-bears
 goats-eat-googles
 ouble-for-troubled

 goats-eat-googles

 bad-things-gone

 media-obsessed-with-bears
 bears-love-berries
 ndidate-is-jerk

其中一些没有正确修剪或有一些关于它我不理解。我花了几个小时研究和尝试不同的方法,但我似乎无法弄明白。

2 个答案:

答案 0 :(得分:0)

ltrim并不能完全按照您的想法行事。它从左侧开始并修剪/article/中出现的任何符号,这意味着它还会从tr中删除trouble,因为tr属于/article/ {1}}。请改用substring(),它也支持模式匹配。

答案 1 :(得分:0)

根据PSQL:https://www.postgresql.org/docs/9.6/static/functions-string.html

  

LTRIM将“删除仅包含字符中字符的最长字符串”

select ltrim('zzzytest', 'xyz') 
Result: 'test'

所以你不会像你想象的那样替换单个文本条目。它将从字符串中删除字符,而不仅仅是您要删除的一个字符。

所以在这个实例中,你的一个混乱的字符串输出

  

/条/候补是-加加速度

正在变成

  

ndidate-是-加加速度

如果您尝试仅从句子中删除特定字符串,则最好使用替换。替换的语法是: 替换('STRING OR COLUMN','要替换的文本','要替换'的文本')

select replace('/article/candidate-is-jerk', '/article/', '')
Result: "candidate-is-jerk"