我正在尋找從查詢中長度可變的混合字母數字字符字符串中提取特定數字。我將需要這個來計算基於該數字的範圍。我正在使用Oracle。Oracle從字符串中提取可變數字
實施例:
d-3-J32P232
-I需要抓住至少J32,以及最有可能甚至在32出該字符串的。這個範圍的數字可以在任何給定的時間改變。
它的範圍可以從:
d-3-J1P232 到 d-3-J322P2342
在第二和第三字母后的數字可以是任何數目的長度。有沒有辦法做到這一點?
我正在尋找從查詢中長度可變的混合字母數字字符字符串中提取特定數字。我將需要這個來計算基於該數字的範圍。我正在使用Oracle。Oracle從字符串中提取可變數字
實施例:
d-3-J32P232
-I需要抓住至少J32,以及最有可能甚至在32出該字符串的。這個範圍的數字可以在任何給定的時間改變。
它的範圍可以從:
d-3-J1P232 到 d-3-J322P2342
在第二和第三字母后的數字可以是任何數目的長度。有沒有辦法做到這一點?
REGEXP_SUBSTR可以工作(11克版):
SELECT REGEXP_SUBSTR('D-3-J322P2342','([A-Z]+-\d+-[A-Z]+)(\d+)',1,1,'i',2) num
FROM dual;
您的樣本數據的測試:
SQL> SELECT REGEXP_SUBSTR('D-3-J322P2342',''([A-Z]+-\d+-[A-Z]+)(\d+)',1,1,'i',2) num
2 FROM dual;
NUM
---
322
SQL>
這將接受任何情況下阿爾法字符串,接着是破折號,接着是一個或多個數字,接着是破折號,接着是另一個任意情況的字母串,然後是您感興趣的數字。
在10g REGEXP_REPLAC E,這是有點不太簡單,因爲他們不加引用子表達式,直到11g中的能力:
SELECT REGEXP_SUBSTR(str,'\d+',1,1) NUM
FROM (SELECT REGEXP_REPLACE('D-3-J322P2342','([A-Z]+-\d+-[A-Z]+)','',1,1,'i') str
FROM dual);
您的樣本數據:
SQL> SELECT REGEXP_SUBSTR(str,'\d+',1,1) NUM
2 FROM
(SELECT REGEXP_REPLACE('D-3-J322P2342','([A-Z]+-\d+-[A-Z]+)','',1,1,'i') str
3 FROM dual);
NUM
---
322
REGEXP_SUBSTR會做的工作
這是簡單的,並得到兩範圍內的數字
select substr(REGEXP_SUBSTR('D-3-J322P2342','[A-Z][0-9]+',1,1),2),
substr(REGEXP_SUBSTR('D-3-J322P2342','[A-Z][0-9]+',1,2),2)
from dual
謝謝,這是非常有幫助的。 – JoshG