从postgres中的路径中分割出文件名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从postgres中的路径中分割出文件名相关的知识,希望对你有一定的参考价值。
我有一个包含Windows文件路径的字段,如下所示:
\fs1fooarsnafu.txt
c: hisiswhyidrinksnafu.txt
\fs2ippityaz.zip
\fs3oppityooaz.zip
c:userschrisdonut.c
我需要做的是找到重复文件名的数量(无论它们在哪个目录中)。所以我想找到“snafu.txt”和“baz.zip”,但不是donut.c。
PostgreSQL(8.4)中有没有办法找到文件路径的最后一部分?如果我能做到这一点,那么我可以使用count / group来找到我的问题孩子。
答案
您可以使用类似的表达式轻松地将路径剥离到最后一个目录分隔符
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;
另一答案
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;
另一答案
select regexp_replace(path_field, '.+/', '') from files_table;
以上是关于从postgres中的路径中分割出文件名的主要内容,如果未能解决你的问题,请参考以下文章