RegEx сопоставляет шаблон только после того, как был найден первый шаблон - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь вернуть совпадение только из строки, если IFF a другой шаблон сначала сопоставляется в Oracle, используя RegEx_Like и RegExp_Substr, но я получаю смешанные результаты.

Ниже приведен пример данных, которые у меня есть и что я пытаюсь получить из них:

+-----------------------------+---------+
|            Data             |  Goal   |
+-----------------------------+---------+
| 201301-P706466 JFK CLASSICS | P706466 |
| 201301-706466 WRI CLASSICS  | 706466  |
| 201301 706466 JFK CLASSICS  | 706466  |
| 201301 P706466 WRI CLASSICS | 706466  |
| 201910-MLB-CVG4             | NULL    |
| 201209-JFK CLASSICS         | NULL    |
| 201203-WRI CLASSICS         | NULL    |
| 201209 JFK CLASSICS         | NULL    |
| 201203 WRI CLASSICS         | NULL    |
+-----------------------------+---------+

Запрос:

select    pid.location
        , pnm.pn as mpn
        , pid.pn as pn
        , pid.batch
        , pid.goods_rcvd_batch as grb
        , pid.sn
        , pid.bin
        , Case When RegExp_Like(pid.bin, ''''^\d{6}\-|^\d{6}\s'''') Then RegExp_Substr(pid.bin, ''''\d{6}|(P)\d{6}.*?(\d{6})|((P)\d{6})'''') 
          End As Bin_Esn                        
from    pn_inventory_detail pid
join    pn_interchangeable pni on pid.pn = pni.pn_interchangeable
join    pn_master pnm on pni.pn = pnm.pn
where   pid.installed_ac is null
    and pid.owner is null
    and pid.loan_category is null
    and pid.nha_pn is null

Я пробовал разные варианты this , но на regex101, но, как вы увидите после перехода по ссылке, он соответствует больше, чем мне нужно.

Я думаю, что я могу идти по этому пути совсем неправильно, вот почему я здесь. Сказав это, какой шаблон работает для моего случая и является наиболее эффективным?

1 Ответ

2 голосов
/ 11 октября 2019

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

^\d{6}[-\s]{1}(\d{6}|P\d{6})

Демо: Здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...