2013-04-09 34 views
2

我已經發現我需要使用substr/instr或正則表達式,但閱讀有關這些文檔,我無法完成它... 我在Oracle 11.2上。Oracle特定字符後的子字符串

所以這裏是我的。 字符串的列表喜歡:

743H5-34L-56 
123HD34-7L 
12HSS-34R 
23Z67-4R-C23 

我需要的是數(長度1或2)之後的第一個「 - 」,直到有一個自帶「L」或「R」。

有沒有人建議?

回答

3
regexp_replace(string, '^.*?-(\d+)[LR].*$', '\1') 

fiddle

+1

這樣做的伎倆,謝謝! 當人們對此沒有深入瞭解時,語法非常混亂......至少在創建語句時。諒解與我身邊的doku =) – 2013-04-09 09:13:18

4

另一個版本(不花哨lookarounds :-):

with v_data as (
    select '743H5-34L-56' val from dual 
    union all 
    select '123HD34-7L' val from dual 
    union all 
    select '12HSS-34R' val from dual 
    union all 
    select '23Z67-4R-C23' val from dual 
) 
select 
    val, 
    regexp_replace(val, '^[^-]+-(\d+)[LR].*', '\1') 
from v_data 

它匹配

  • 字符串的開始 「^」
  • 一個或更多字符不是「 - 」「[^ - ] +」
  • 後跟一個 ' - ' 「 - 」
  • 接着是一個或多個位(一組中的捕獲圖像,來) 「(\ d +)」
  • 後跟 'L' 或 'R「'[LR] 「
  • 後面緊跟零個或多個任意字符」。*「
+1

+1對於正則表達式的解釋 – KrishPrabakar 2013-12-24 15:42:26

相關問題