postgresql 如何在Postgres SQL中删除字符串的特定部分?

t9eec4r0  于 2023-01-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(309)

假设我在postgres数据库中有一个名为pid的列,如下所示:

set1/2019-10-17/ASR/20190416832-ASR.pdf
set1/2019-03-15/DEED/20190087121-DEED.pdf
set1/2021-06-22/DT/20210376486-DT.pdf

我想删除最后一个破折号“-”之后的所有内容,包括破折号本身。因此预期结果:

set1/2019-10-17/ASR/20190416832.pdf
set1/2019-03-15/DEED/20190087121.pdf
set1/2021-06-22/DT/20210376486.pdf

我已经研究了replace()和split_part()函数,但仍然不知道如何操作。请提供建议。

ar7v8xwq

ar7v8xwq1#

我们可以在这里使用正则表达式替换:

SELECT col, REGEXP_REPLACE(col, '^(.*)-[^-]+(\.\w+)$', '\1\2') AS col_out
FROM yourTable;

上面使用的正则表达式捕获\1中最后一个破折号之前的列值,以及\2中的扩展名,然后使用\1\2作为替换构建输出。
这里有一个working regex demo

相关问题