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 に答える