RegEx в Oracle SQL, позитивный взгляд в будущее - PullRequest
2 голосов
/ 03 марта 2020

У меня есть строка, и я хотел бы захватить все до "\ Close_Out":

string: \ fileshare \ R and G \ 123456 \ Close_Out \ Warranty Letter.pdf

Единственное решение, которое я придумал, использует позитивный взгляд, это работает, когда я тестирую его на https://regex101.com/

(.*)(?=\\Close_Out)

Но теперь мне нужно использовать его в Oracle SQL оператор:

select REGEXP_SUBSTR('\\fileshare\R and G\123456\Close_Out\Warranty Letter.pdf', '(.*)(?=\\Close_Out)') from dual

и он не работает, так как (я думаю) взгляд в будущее не поддерживается. Может ли кто-нибудь помочь с альтернативным выражением, которое будет работать в sql

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Если регулярные выражения не должны , то substr + instr выполняет работу:

SQL> with test (col) as
  2    (select '\fileshare\R and G\123456\Close_Out\Warranty Letter.pdf' from dual)
  3  select substr(col, 1, instr(col,'\Close_Out') - 1) result
  4  from test;

RESULT
-------------------------
\fileshare\R and G\123456

SQL>
1 голос
/ 03 марта 2020

Просто для полноты, этот REGEXP предоставляет результат включительно \Close_Out

select REGEXP_SUBSTR('\\fileshare\R and G\123456\Close_Out\Warranty Letter.pdf', '.*\\Close_Out') reg from dual;


REG                                 
------------------------------------
\\fileshare\R and G\123456\Close_Out

Чтобы получить строку перед , используется подвыражение - часть, заключенная в паретезы и имеющая ссылку на подвыражение параметр = 1 (последний параметр - см. Подробности в документации ).

select REGEXP_SUBSTR('\\fileshare\R and G\123456\Close_Out\Warranty Letter.pdf', '(.*)\\Close_Out', 1, 1, null, 1) reg from dual;


REG                       
--------------------------
\\fileshare\R and G\123456
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...