2016-02-15 23 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