2016-02-15 49 views
1

我的數據庫中有'描述'列。 本專欄包含各種產品說明。 在每個產品的描述中都提到了價格。從Oracle中的字符串中提取變量

格式是alvesys,如'蘋果每月10歐元,包括包','西班牙語每包9歐元,包括包',等等。

我想提取的提取物只有價格對這些產品,即「10」,「9」等

select SUBSTR(DESCRIPTION, 0, INSTR(DESCRIPTION, 'EUR/month') - 1) 
    from PRODUCT_DESCRIPTION 
where PRODUCT IN ('Apples', 'Tomatos'); 

我用了上面的腳本,但我得到的結果是:「蘋果10','Tomatos for 9'等。

你知道我應該使用什麼條件才能獲得成本嗎?

回答

0

如果總是結構,然後就掏出數:

select regexp_substr(description, '[0-9.]+') 
from product_description 
+0

只有關於成本的信息總是相同的,也就是10歐元/月。不幸的是,你分享的腳本不起作用。 –

+0

@ Florin.Tns:Gordon的查詢與您給出的格式完全匹配。那麼它以什麼方式不起作用?還有哪些其他格式可以讓這個解決方案不起作用? –

+1

啊,對,它應該是''[0-9] +''而不是'[0-9。] *''。 (如果這些值可以有小數和/或千分隔符,則附加'.'和/或','。) –

0

你可以用REGEXP_REPLACE除去休息和利用分組。

select regexp_replace(DESCRIPTION, '.*\s+(\d+)\s*EUR.*','\1') 
-- You are using the grouping of regexp, and reuse the number that has been found 
from PRODUCT_DESCRIPTION