2013-09-05 3 views
0

У меня есть строковый формат MID: 124281-2 - SID: 31701 в столбце.Oracle: REGEXP_SUBSTR для извлечения нужной строки

Необходимо извлечь из него 124281-2 и 31701.

Пытались

SELECT REGEXP_SUBSTR('MID: 124281-2 - SID: 31701', ':[^,]+-') FROM DUAL; 

Но результат : 124281-2 -

Как я могу удалить : и -?

Заранее спасибо

+3

'select regexp_substr (mid_sid_column, '\ d [0-9 -] *', 1, 1) как mid, regexp_substr (mid_sid_column, '\ d [0-9 -] *', 1, 2) как sid из таблицы' –

+0

@Egor, спасибо, это работает :) – Ianthe

ответ

0

Некоторые люди, сталкиваясь с проблемой, думаю, «Я знаю, я буду использовать регулярные выражения.» Теперь у них есть две проблемы. - Jamie Zawinski

Это не значит, что никогда не используйте регулярное выражение, но в таком случае может быть гораздо более простой вариант; не могли бы вы попытаться использовать более простой подход - скажем, символы SUBSTR с 6 по 13 (124281-2) и символы с 22 по 26 (31701)? Это предполагает фиксированную длину подстроки, которой у вас может не быть, - но стоит посмотреть.

В качестве альтернативы, если вам нужно использовать регулярное выражение, вам нужно будет использовать группы, чтобы уловить два значения, которые вы хотите вернуть; попытаться быть более точным - что-то вроде [A-Z]+: ([0-9\-]+) \- [A-Z]+: ([0-9]+)

0

от:

'MID: 124281-2 - SID: 31701'

регулярное выражение, чтобы получить 124281-2 только:

[0-9]{1,6}-[0-9] 

описание:

[0-9]{1,6} match a single character present in the list below 
    Quantifier: Between 1 and 6 times, as many times as possible, giving back as 
       needed. 
    0-9 a single character in the range between 0 and 9 
- matches the character - literally 
[0-9] match a single character present in the list below 

, если ограничение для пожелавших символов между ':' и '-' вы можете использовать следующее регулярное выражение:

(?<=:\s)[^,]+(?=\s-) 

Описание:

(?<=:\s) Positive Lookbehind - Assert that the regex below can be matched 
     : matches the character : literally 
     \s match any white space character [\r\n\t\f ] 
    [^,]+ match a single character not present in the list below 
     Quantifier: Between one and unlimited times, as many times as possible, 
        giving back as needed. 
     , the literal character , 
    (?=\s-) Positive Lookahead - Assert that the regex below can be matched 
     \s match any white space character [\r\n\t\f ] 
     - matches the character - literally 

надеюсь, что это помогает.

Смежные вопросы