Postgresql REGEXP_SPLIT_TO_TABLE - 我想从完整路径中获取没有扩展名的文件名

确认

我在 PostgreSQL 表中有一系列文件路径,我希望获得没有扩展名的文件名。显示了一些示例数据(另请参阅此处的小提琴)-

VALUES
(1, '/users/mcm1/ualaoip2/vmm/file1.pdf'),
(2, '/users/mcm1/ualaoip2/vmm/file2.py'),
(3, '/users/mcm1/ualaoip2/vmm/file3.pdf'),
(8, '/users/mcm1/ualaoip2/vmm/file8.tar.gz'),
(9, '/users/mcm1/my_prog.cpp');

想要的结果——

file1
file2
file2
file8.tar
my_prog

现在,我一直在尝试掌握正则表达式(我是新手)并且取得了一些进展。这是我到目前为止的代码 -

SELECT regexp_split_to_table(w.file_name, '^/.*/.*/......../.../') AS fn
FROM with_filename w

到目前为止的结果 - 每隔一行之前和之后都有一个空行 - 不明白为什么!

fn

file1.pdf

file2.py

file3.pdf

file8.tar.gz

/users/mcm1/my_prog.cpp

现在,我遇到了很多问题——

我知道我的正则表达式 -'^/.*/.*/......../.../'一团糟。基本上,我将文件路径硬编码到正则表达式中,如您所见。我不接,my_prog因为正则表达式太长了。我不确定我的重复组的概念是否正确 - 即.*(我开始时到处都是点,经过一些阅读,我得到了点星符号)。

这是实现这一目标的最佳方式吗?我知道我必须能够改变出现的次数/../..-'^(/.*/)'也许使用这个

最后,我的主要问题是我不知道如何保留文件名并消除扩展名。可能存在没有扩展名的文件。我将不胜感激,不仅要得到答案,还要解释正则表达式中发生的事情!如果需要更多数据,请告诉我!

缺口

您可以REGEXP_REPLACE在这里使用,匹配最终之后的所有内容/(通过匹配[^/]之后强制执行,然后使用带有可选.xxx扩展名的延迟匹配来匹配文件名:

SELECT
    file_name,
    REGEXP_REPLACE(file_name, '^.*/([^/]*?)(\.[^/.]+)?$', '\1') AS filename
FROM with_filename;

输出:

file_name                               filename
/users/mcm1/ualaoip2/vmm/file1.pdf      file1
/users/mcm1/ualaoip2/vmm/file2.py       file2
/users/mcm1/ualaoip2/vmm/file3.pdf      file3
/users/mcm1/ualaoip2/vmm/file4.c        file4
/users/mcm1/ualaoip2/vmm/file5.java     file5
/users/mcm1/ualaoip2/vmm/file6.class    file6
/users/mcm1/ualaoip2/vmm/file7          file7
/users/mcm1/ualaoip2/vmm/file8.tar.gz   file8.tar
/users/mcm1/my_prog.cpp                 my_prog

dbfiddle 上的演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PostgreSQL:将regexp_split_to_table结果合并为一列?

在 PostgreSQL 中获取没有扩展名的 Windows 文件名

PgSql插入具有多个regexp_split_to_table的多个记录

行号 regexp_split_to_table

PostgreSQL-修改扩展名中的CREATE TABLE语法

Powershell 删除完整路径名的扩展名(我不想要文件名)

如何获取具有完整路径以及扩展名的所有文件名的列表

使用regexp_split_to_table(Amazon Redshift)时出错

ProstgreSQL:使用regexp_split_to_table拆分列

如何从没有扩展名的路径中获取特定文件名python

如何从完整路径中提取不带扩展名的文件名?

如何在C ++(Linux)中获取具有文件名的文件的完整路径

如何在Python中从具有完整路径的变量中获取文件名?

如何从上传的图片中获取文件扩展名,而文件名中没有扩展名

AppleScript中没有扩展名的文件名

从文件的完整路径仅获取文件名

如何从完整文件路径中删除除文件名(无扩展名)以外的所有文件?

通过regexp删除具有特定扩展名的文件

如何使用PHP从完整路径获取文件名?

如何使用JavaScript从完整路径获取文件名?

我应为新建的PostgreSQL模式使用正确的文件扩展名?

没有完整路径作为文件名的 Ubuntu mailx 附加文件

在Python中构建完整路径文件名

没有完整路径的Python Glob-仅文件名

在Azure数据工厂上获取具有完整路径的文件名

如何只恢复没有路径和文件扩展名的文件名?

RegExp使用目录和文件扩展名黑名单过滤特定文件路径

查询 PostgreSQL 以获取日志目录/文件名

如何从Ruby中的文件路径获取不带扩展名的文件名