Как извлечь расширение файла из поля пути к файлу в PostgreSQL?

нужно извлечь расширения файлов из столбца file_path моей таблицы PostgreSQL. Пожалуйста, помогите мне извлечь отдельные расширения файлов в виде списка с помощью запроса выбора.

есть такая таблица

ожидаемый результат вроде есть

строка_но расширение 1 JPEG 2 png

мой вопрос

select reverse(substring(reverse(file_path) from 1 for strpos(reverse(file_path),'.')-1)) as extension from pgsql_table_files;

Так в чем именно у вас вопрос?

phaen 07.05.2024 16:19

нужно получить запрос выбора, чтобы получить список расширений @phaen

Vijayaragavan Ambalam 07.05.2024 16:25

Использование 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')

JNevill 07.05.2024 16:26

Проверьте, работает ли это у вас SELECT id AS row_no DISTINCT substring(file_path from '\.([^.]*)$') AS extension FROM pgsql_table_files;

SavindraSingh 07.05.2024 16:32

Ошибка SQL [42601]: ОШИБКА: синтаксическая ошибка в позиции «DISTINCT» или рядом с ней: 35

Vijayaragavan Ambalam 07.05.2024 16:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Простое решение с использованием 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

большой! спасибо... очень коротко и мило

Vijayaragavan Ambalam 13.05.2024 11:35

Другие вопросы по теме