2016-03-15 35 views
0

我對SQL很新,我試圖從ORACLE DB中提取一些數據。我的目標是返回查詢值位於表格中「AA_SYNTAX」列指定範圍內的行。如何從SQL中的文本中提取數字範圍

例如:

如果「AA_SYNTAX」欄中的「p.G12_V14insR」和我的搜索值是13,我要回該行。此欄按照%。number_%number%組織。所以基本上我想返回這個列中的兩個數值,看看我的查詢值是否在它們之間。

我有我需要的所有表連接在一起,一切,只是不知道如何構建這樣的查詢。我知道在正則表達式我會做一些像「\ D +」但我不知道如何將其轉換爲SQL。

謝謝

+1

**數字範圍!因爲數值範圍和正則表達式並不齊頭並進,所以你會被警告!! –

+0

我可能會在http://stackoverflow.com/questions/3968178/oracle-replacing-non-numeric-chars-in-a-string中使用regex_Replace兩次。一次爲_之前,一次爲_之後,然後將其用作where子句......'RegEx1Eval和regEx2Eval之間的AA_Syntax' – xQbert

回答

0

使用Oracle,你可以use Regular Expressions to extract a number from the string。我想查看REGEXP_SUBSTR

使用在你上面的例子給出的日期,你可以使用:

with cte as 
(
    select 'p.G12_V14insR' as AA_SYNTAX from dual 
) 

select 
    REGEXP_SUBSTR(AA_SYNTAX,'p\.[[:alpha:]]+([[:digit:]]+)', 1, 1, NULL, 1) as Bottom 
    ,REGEXP_SUBSTR(AA_SYNTAX,'\_[[:alpha:]]+([[:digit:]]+)', 1, 1, NULL, 1) as Top 
from cte 

我敢肯定,你可以清理正則表達式了不少,但是,鑑於這一點,你得到的14值對於Top和對於Bottom的12。

希望這有助於你朝着正確的方向前進。

+0

非常感謝。我想我明白這是如何工作的,但我怎樣才能將硬編碼的'p.G12_V14insR'更改爲表格中列的值。如下所示:「DB.TABLE.COLUMN as dual AA_SYNTAX」 –

+0

完全如你所料,這是一個普通的'select'語句。只需按照您的規則選擇它。 – Blindy

+0

只是不要從'cte'中選擇 - 我用它來簡單地創建一些東西來選擇 - 從你的表中選擇,而不是....'SELECT REGEXP_SUBSTR(AA_SYNTAX,... FROM MyTable ....' –

相關問題