sql - 从postgres中的路径中分离出文件名

标签 sql postgresql

我有一个包含 Windows 文件路径的字段,如下所示:

\\fs1\foo\bar\snafu.txt
c:\this\is\why\i\drink\snafu.txt
\\fs2\bippity\baz.zip
\\fs3\boppity\boo\baz.zip
c:\users\chris\donut.c

我需要做的是找到重复文件名的数量(不管它们在哪个目录中)。所以我想找到“snafu.txt”和“baz.zip”,而不是 donut.c。

在 PostgreSQL (8.4) 中有没有办法找到文件路径的最后一部分?如果我能做到这一点,那么我就可以使用计数/分组来找到我的问题 child 。

最佳答案

您可以使用类似

的表达式轻松地将路径剥离到最后一个目录分隔符
regexp_replace(path, '^.+[/\\]', '')

这也将匹配某些软件偶尔产生的正斜杠。然后你只需计算剩余的文件名,如

WITH files AS (
    SELECT regexp_replace(my_path, '^.+[/\\]', '') AS filename
    FROM my_table
)
SELECT filename, count(*) AS count
FROM files
GROUP BY filename
HAVING count(*) >= 2;

关于sql - 从postgres中的路径中分离出文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750846/

相关文章:

postgresql - 列出用户可以执行的所有功能

postgresql - libgdal.so.1 : undefined symbol: sqlite3_column_table_name

具有不同列的两个表的 SQL 并集

sql - 如何在oracle中用另一个值替换列的前两个字符

mysql - 价格,以 VARCHAR 格式转换为 DECIMAL 格式

当间隔是字符串连接的结果时,Postgresql 会报错

postgresql - postgres异常处理

sql - 具有行版本控制的 PostgreSQL 数据库

sql - SELECT SQL 查询帮助

sql - 在 PostgreSQL 中以两种方式对数据集进行分组