SQL TRIM()函数中的奇怪错误

Kar*_*loh 4 sql string postgresql select trim

我有下表:

select * from top3art;

            path             | count
-----------------------------+--------
 /article/candidate-is-jerk  | 338647
 /article/bears-love-berries | 253801
 /article/bad-things-gone    | 170098
Run Code Online (Sandbox Code Playgroud)

我想在路径值中删除'/ article /',所以我这样做:

select *, trim(leading '/article/' from path) from top3art;

            path             | count  |       ltrim
-----------------------------+--------+--------------------
 /article/candidate-is-jerk  | 338647 | ndidate-is-jerk
 /article/bears-love-berries | 253801 | bears-love-berries
 /article/bad-things-gone    | 170098 | bad-things-gone
Run Code Online (Sandbox Code Playgroud)

第2行和第3行工作正常.但是第一排发生了什么?它修剪了'/ article/ca'.为什么还需要2个字符?

现在看看当我修剪'/ articl'时会发生什么:

select *, trim(leading '/articl' from path) as test from top3art;

            path             | count  |         test
-----------------------------+--------+----------------------
 /article/candidate-is-jerk  | 338647 | e/candidate-is-jerk
 /article/bears-love-berries | 253801 | e/bears-love-berries
 /article/bad-things-gone    | 170098 | e/bad-things-gone
Run Code Online (Sandbox Code Playgroud)

这按预期工作...现在看看当我在trim子句中添加一个char时会发生什么,'/ article':

select *, trim(leading '/article' from path) as test from top3art;

            path             | count  |        test
-----------------------------+--------+--------------------
/article/candidate-is-jerk  | 338647 | ndidate-is-jerk
/article/bears-love-berries | 253801 | bears-love-berries
/article/bad-things-gone    | 170098 | bad-things-gone
Run Code Online (Sandbox Code Playgroud)

与第一个结果相同!我无法理解这一点.为什么会这样?我如何解决它?

Mur*_*nik 5

trim从第二个参数中删除第一个参数中的任何字符,因此它也会删除"候选" ca"候选".而不是trim,你可以使用一个split_part电话:

select *, split_part(path, '/article/', 2) as test from top3art;
Run Code Online (Sandbox Code Playgroud)