Postgres - 截断字符串
Postgres - truncate string
我有一个 Postgres 9.3 数据库,我想在 table 中整理一个名为文件名的列。当前的数据如下所示:
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
我能看到的唯一方法是修剪最后一个 / 字符左侧的所有内容。
非常感谢任何帮助
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)
睡了一夜之后,我想出了一个相当简单的方法,使用 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
此致
您也可以使其非常通用 - 如果您不知道文件名并且只知道分隔符是 / 字符。 table 称为 databasechangelog,列名称称为 'filename'。
select split_part(filename, '/', length(filename) - length(regexp_replace(filename, '/', '', 'g')) / length('/')+1) from databasechangelog
我有一个 Postgres 9.3 数据库,我想在 table 中整理一个名为文件名的列。当前的数据如下所示:
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
我能看到的唯一方法是修剪最后一个 / 字符左侧的所有内容。 非常感谢任何帮助
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)
睡了一夜之后,我想出了一个相当简单的方法,使用 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
此致
您也可以使其非常通用 - 如果您不知道文件名并且只知道分隔符是 / 字符。 table 称为 databasechangelog,列名称称为 'filename'。
select split_part(filename, '/', length(filename) - length(regexp_replace(filename, '/', '', 'g')) / length('/')+1) from databasechangelog