Postgres - 截断字符串

时间:2015-09-17 18:57:58

标签: postgresql truncate

我有一个Postgres 9.3数据库,我想在表格中整理一个名为filename的列。目前的数据如下:

C:/TEST/APP/db.1.0.0-RELEASE.xml
C:/TEST/APP/db.1.0.0-RELEASE.xml
C:/USP/APP/liquibase/db.1.0.0-RELEASE.data.xml
C:/USP/APP/liquibase/db.1.0.0-RELEASE.data.xml

我想删除文件路径(可能是一个可变长度),这样我最终只得到文件名,例如。

db.1.0.0-RELEASE.xml
db.1.0.0-RELEASE.xml
db.1.0.0-RELEASE.data.xml
db.1.0.0-RELEASE.data.xml

我能看到的唯一方法是修剪最后一个/角色左边的所有内容。 任何帮助非常感谢

3 个答案:

答案 0 :(得分:0)

使用regexp_replace()

select regexp_replace (t, '.*/', '')
from (
    values 
    ('C:/TEST/APP/db.1.0.0-RELEASE.xml'),
    ('C:/USP/APP/liquibase/db.1.0.0-RELEASE.data.xml')
    ) sub(t)

      regexp_replace
---------------------------
 db.1.0.0-RELEASE.xml
 db.1.0.0-RELEASE.data.xml
(2 rows)        

答案 1 :(得分:0)

在一夜之间睡觉后,我想出了一个相当简单的方法,使用SUBSTR使用POSIX正则表达式提取子字符串。

update databasechangelog
set filename = substring(filename from 'db.1.0.0-RELEASE.*')

Query returned successfully: 517 rows affected, 104 ms execution time.

我现在有一个满足我需求的整洁专栏。

db.1.0.0-RELEASE.xml
db.1.0.0-RELEASE.xml
db.1.0.0-RELEASE.xml
db.1.0.0-RELEASE.xml
db.1.0.0-RELEASE.data.xml
db.1.0.0-RELEASE.data.xml
db.1.0.0-RELEASE.data.xml
db.1.0.0-RELEASE.data.xml

此致

答案 2 :(得分:0)

你也可以使它非常通用 - 如果你不知道文件名,只有分隔符是/字符。该表称为databasechangelog,列名称称为“filename”。

select split_part(filename, '/', length(filename) - length(regexp_replace(filename, '/', '', 'g')) / length('/')+1) from databasechangelog