9

我有一个包含 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)中有没有办法找到文件路径的最后一部分?如果我能做到这一点,那么我可以使用计数/组来找到我的问题孩子。

4

3 回答 3

16

您可以使用如下表达式轻松地将路径剥离到最后一个目录分隔符

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;
于 2012-12-06T19:55:27.340 回答
1
select regexp_replace(path_field, '.+/', '') from files_table;
于 2012-12-06T19:26:27.727 回答
1
CREATE OR REPLACE FUNCTION basename(text) RETURNS text
    AS $basename$
declare
    FILE_PATH alias for $1;
    ret         text;
begin
    ret := regexp_replace(FILE_PATH,'^.+[/\\]', '');
    return ret;
end;
$basename$ LANGUAGE plpgsql;
于 2015-03-05T13:39:08.483 回答