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)
与第一个结果相同!我无法理解这一点.为什么会这样?我如何解决它?
trim从第二个参数中删除第一个参数中的任何字符,因此它也会删除"候选" c和a"候选".而不是trim,你可以使用一个split_part电话:
select *, split_part(path, '/article/', 2) as test from top3art;
Run Code Online (Sandbox Code Playgroud)