-1

我正在使用 Oracle 11G,并且具有以下字段 NAME 和以下字符串:

NAME
'String having ZT-01183 - App # 2'
'This String having AG-01183 with - Apps # 4'

我正在使用以下正则表达式,但得到的是以下内容:ZT-01183 - App # 2 和 AG-01183 with - Apps # 4。

CASE 
    WHEN REGEXP_LIKE(NAME, 'ZT-|AG-|having') 
    THEN regexp_replace(NAME, '^.*? having ','')
    END AS NEW_NAME

我只想获取语句中的下一个字符串,因此结果应该是 AG-01183 和 ZT-01183。相反,我得到了一切。任何帮助将不胜感激。

4

2 回答 2

1

你可以使用

THEN regexp_replace(name, '.*having ([^ ]+).*', '\1')

编辑:

我最初使用lookbehind 的想法似乎已被Oracle 似乎无法使用lookbehind 所破坏。我的编辑使用组来取回您想要的东西。

于 2013-03-03T23:51:33.650 回答
0

请试试:

THEN regexp_substr(NAME, '[A-Z]{2}-[0-9]{5}')
于 2013-03-04T00:14:01.020 回答