我有一个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
我能看到的唯一方法是修剪最后一个/角色左边的所有内容。 任何帮助非常感谢
答案 0 :(得分:0)
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