нужно извлечь расширения файлов из столбца file_path моей таблицы PostgreSQL. Пожалуйста, помогите мне извлечь отдельные расширения файлов в виде списка с помощью запроса выбора.
есть такая таблица
ожидаемый результат вроде есть
мой вопрос
select reverse(substring(reverse(file_path) from 1 for strpos(reverse(file_path),'.')-1)) as extension from pgsql_table_files;
нужно получить запрос выбора, чтобы получить список расширений @phaen
Использование SPLIT_PART(): SELECT SPLIT_PART('https://example.com/public/upload/resume.png','.', -1) или REGEXP_REPLACE(): SELECT REGEXP_REPLACE('https://example.com/public/upload/resume.png','^.*\.(.*)$', '\1')
Проверьте, работает ли это у вас SELECT id AS row_no DISTINCT substring(file_path from '\.([^.]*)$') AS extension FROM pgsql_table_files;
Ошибка SQL [42601]: ОШИБКА: синтаксическая ошибка в позиции «DISTINCT» или рядом с ней: 35





Простое решение с использованием split_part отсюда Строковые функции.
create table file_ext(id integer, file_path varchar);
insert into file_ext values (1, 'https://example.com/uploads/profile_pic.jpeg'),
(2, 'https://example.com/public/upload/resume.png'),
(3, 'https://example.com/public/upload/cover_letter.png'),
(4, 'https://example.com/uploads/cat_pic.jpeg');
select * from file_ext ;
id | file_path
----+----------------------------------------------------
1 | https://example.com/uploads/profile_pic.jpeg
2 | https://example.com/public/upload/resume.png
3 | https://example.com/public/upload/cover_letter.png
4 | https://example.com/uploads/cat_pic.jpeg
select distinct split_part(file_path , '.', -1) as extension from file_ext;
extension
------------
png
jpeg
Используйте split_part, чтобы разбить строку на ., а затем используйте обратную индексацию (-1), чтобы получить последнее разделение, которое является расширением. Затем используйте DISTINCT, чтобы получить только одну запись для каждого расширения.
Если вы хотите включить номер строки, то:
select
distinct on(split_part(file_path , '.', -1)) row_number() over() as row_no,
split_part(file_path , '.', -1) as extension from file_ext;
row_no | extension
--------+------------
1 | jpeg
2 | png
большой! спасибо... очень коротко и мило
Так в чем именно у вас вопрос?