Поэтому я пытаюсь выбрать только последнюю строку в столбце

Вот пример того, что я пытаюсь сделать

У меня есть таблица с продуктами, и изображения продуктов находятся в папке folder \ folder \ folder, в некоторых из которых больше папок, чем в других, и я хочу просто просмотреть файл изображения, например:

SELECT REGEXP_REPLACE(FILE_PATH, '[\|\]', ' ') FROM PRODUCT;

Я получил это, чтобы просто разбить путь к файлу, такой как папка папка папка cars.img

Но теперь я хочу просто взять строку cars.img, используя substr, это не очень помогает, поскольку некоторые пути к файлам длиннее других, а имена файлов img длиннее других

0
Alex Salgado 9 Сен 2017 в 02:26

3 ответа

Лучший ответ

Вы абсолютно можете сделать это только с помощью SUBSTR и INSTR, и это будет быстрее (возможно, намного быстрее), чем любое решение на основе REGEXP.

Ключ «отсчитывает от конца строки», что делается с помощью отрицательных значений для аргумента позиции.

select substr(file_path, instr(file_path, '\', -1) + 1) from product;

instr(file_path, '\', -1) найдет позицию «первой» обратной косой черты от конца строки. Затем substr будет читать из позиции next (вот почему у вас +1) и будет читать до конца строки (по умолчанию, когда вы опускаете третий аргумент для {{ Х2 } } ) .

< Сильный > Demo :

with product ( file_path ) as (
       select 'c:\del\img.jpg'               from dual union all
       select '.\prog\total\another_img.gif' from dual union all
       select 'image.gif'                    from dual
     )
-- End of SIMULATED inputs (for testing only, not part of the solution).
-- SQL query begins BELOW THIS LINE.
select substr (file_path, instr(file_path, '\', -1)  + 1) as file_name
from   product
;

FILE_NAME
---------------
img.jpg
another_img.gif
image.gif
1
mathguy 9 Сен 2017 в 03:41

Привет Вы можете использовать комбинацию из нижеприведенного:

LEFT(FieldName, 10) = SUBSTR(FieldName, 1, 10)
RIGHT(FieldName, 3) = SUBSTR(FieldName, -3)

INSTR( string, substring [, start_position [, th_appearance ] ] )

Надеюсь, это поможет.

Тед.

0
Ted at ORCL.Pro 8 Сен 2017 в 23:31

Вы можете использовать regexp_substr():

select regexp_substr(filepath, '[^\]+$', 1, 1)
0
Gordon Linoff 8 Сен 2017 в 23:57