Строка RTRIM, заканчивающаяся инкрементным числом

#oracle10g

#oracle10g

Вопрос:

Я пытаюсь сузить следующую строку только до имени пользователя. Число в конце всегда разное. Я могу использовать LTRIM просто отлично, но когда я пытаюсь использовать RTRIM, у меня возникают трудности с удалением всего, что находится справа от имени пользователя.

 C:documents and settings[USERNAME]my documentsreports204452.pdf
  

Будет ли RTRIM работать в этом экземпляре? Если нет, то будет оценена точка в правильном направлении.

Спасибо.

Комментарии:

1. Возможно, вы могли бы показать, что вы уже делаете, и почему это не работает. Всегда ли путь до имени пользователя одинаков — один и тот же регистр и не может быть (например) включен D: ?

Ответ №1:

Если имя пользователя всегда является третьим уровнем полного пути, вы можете использовать регулярное выражение:

 regexp_substr(<file path>, '[^\] ', 1, 3)
  

Например:

 select regexp_substr('C:documents and settings[USERNAME]my documentsreports204452.pdf', '[^\] ', 1, 3)
from dual;
  

или использование подзапроса, чтобы сделать его более читаемым:

 select regexp_substr(file_path, '[^\] ', 1, 3)
from (
  select 'C:documents and settings[USERNAME]my documentsreports204452.pdf'
  as file_path
  from dual
);

REGEXP_SUBSTR(FILE_PATH,'[^\] ',1,3)
-------------------------------------
[USERNAME]                            
  

Обратите внимание, что обратная косая черта должна быть экранирована в шаблоне.

Комментарии:

1. Спасибо, Алекс, это было именно то, что мне было нужно.