#regex #oracle
#регулярное выражение #Oracle
Вопрос:
В
SELECT '5-CULVERTS AND UNDERPASSES' FROM DUAL;
попытка получить 5-CULVERTS AND
с помощью строки запроса до второго слова
попытка этого
select regexp_substr('5-CULVERTS AND UNDERPASSES','[^ ]{2} ') from dual
но никакой помощи..
Ответ №1:
Чтобы сопоставить два первых слова, вы можете сделать это:
SELECT REGEXP_SUBSTR(mycolumn, 'S s S ', 1, 1, 'cm') FROM dual;
Объяснение
S
соответствует любым символам, которые не являются пробелами (первое слово)s
соответствует любым символам пробелаS
соответствует второму слову
Вариант 2: второе слово является необязательным
Используйте это:
SELECT REGEXP_SUBSTR('6-BRIDGES', 'S (s S )?', 1, 1) FROM dual;
Пробелы и второе слово теперь заключены в круглые скобки и сделаны необязательными с помощью ?
Комментарии:
1. Ах да. Я забыл о
S
вместо[^s]
. Но я не буду менять свой ответ, потому что вы сделалиS
. 1 вам2. @sshashank124 Спасибо, почти идентичные ответы, я позабочусь о вас в следующий раз. 🙂
3. Спасибо, Низар, рад, что это помогло! 🙂
4.
SELECT REGEXP_SUBSTR('6-BRIDGES', 'S s S ', 1, 1) FROM dual;
это возвращает null5. Да, вы сказали, что хотите два слова. Если вам нужно 1 ИЛИ два слова, используйте это:
SELECT REGEXP_SUBSTR('6-BRIDGES', 'S (s S )?', 1, 1) FROM dual;
обновит ответ. 🙂
Ответ №2:
Вы можете сделать это следующим образом:
[^s] s[^s]
select regexp_substr('5-CULVERTS AND UNDERPASSES','[^s] s[^s] ') from dual
Ответ №3:
вы можете сделать это таким образом
SQL> выберите regexp_substr(‘5-ВОДОПРОПУСКНЫЕ ТРУБЫ И ПОДЗЕМНЫЕ ПЕРЕХОДЫ’,’S (s S )?‘,1,1) из dual;
Out положить
5-ВОДОПРОПУСКНЫЕ ТРУБЫ И