拆分列并在oracle查询中查找min,max和avg值

时间:2016-07-30 16:10:39

标签: sql oracle11g

考虑我有以下数据

Name        Fee
Student1    Fee paid : 100rs 
Student2    Fee paid : 500rs
Student3    Fee paid : 200rs

我需要选择费用列的 max,min和avg 值,需要拆分:和rs delimiter

例如这里 结果是

Min     Max     Avg
100     500     250

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式:

select min(fee_num), max(fee_num), avg(fee_num)
from (
        select to_number(regexp_substr(fee, ':\s*(\d+)\s*rs', 1, 1, null, 1)) fee_num
        from mytable
     )

regexp_substr的6 th 参数(自Oracle 11g起可用)允许您仅返回捕获组匹配的文本(在本例中为\d+)。

正则表达式要求:可选地后跟空格(\s*),然后有一些数字(\d+),再次跟随可选的白色空格,随后rs

请注意,从文本列中检索金额会破坏结构化数据库的任何优势:该列上的索引不会被使用,而使用正则表达式的提取会带来开销。

在规范化的关系数据库设计中,字段仅包含原子数据,而不包含任何其他内容。因此,在这种情况下,fee列应仅包含数量,并且应为数值数据类型。您需要了解的有关费用的任何其他信息应存储在不同的列中。