Oracle从字符串资源中得到想要的数据分析
2014-11-11 13:55
134 查看
[oracle]从字符串资源中得到想要的数据分析
需求:订单分析,按照游戏,帐号级别,游戏帐号职业,区服,价格区间分析各款交易数据走势
。
目标:订单表(order)
处理分析:订单中可以直接读到的标示有游戏、区服、价格。并且已经有相关配置可以关联此类
信息。
问题分析1:帐号职业,帐号级别等交易信息在订单中没有详细的标示,只可以通过其他信息获
取。
处理思路1:通过订单中的标题大概的分析职业和帐号级别。
标题格式如:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/e3b0977d34cfd2c47d05a1dc463731bb.png)
处理思路:从标题中提取出职业和帐号等级。
职业:
substr
(
o5.bizoffername,
instr(o5.bizoffername,'【',1,1)+1,
instr(o5.bizoffername,' ',1,1)-(instr(o5.bizoffername,'【',1,1)+1)
)
级别:
substr
(
o5.bizoffername,
instr(o5.bizoffername,' ',1,3)+1,
instr(o5.bizoffername,'级',1,1)-(instr(o5.bizoffername,' ',1,3)+1)
)
处理结果如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/869458c0da84fbbba9f93fddb95e9736.png)
问题分析2:级别类似'50'这样的是从字符串中提取出来的,作为参数和帐号级别区间维度比较
时会发生无效字符。
处理思路2:果断的想到把字符转化为number,to_number。
问题分析3:转化为to_number后还是会遇到无效字符。
处理思路3:还存在着其他问题,于是创建了一个自定义函数is_number。
CREATE OR REPLACE FUNCTION is_number(parameter VARCHAR2) RETURN NUMBER IS
val NUMBER;
BEGIN
val := TO_NUMBER(NVL(parameter, 'a'));--参数为空则复制字符a
RETURN 1;
EXCEPTION--当遇到'40'这样的TO_NUMBER转化正常,当遇到'40的'时TO_NUMBER异常返回0,
WHEN OTHERS THEN
RETURN 0;
END;
然后看了用思路1处理出来的基础数据,用where IS_NUMBER(级别)=0,发现确实存在一些很少的
处理不规范的'你好20'类似级别字段与number区间判断时就报错了,根源所在。于是只好排除了
这几十条不规则的数据。最终得到业务的需求:
需求:订单分析,按照游戏,帐号级别,游戏帐号职业,区服,价格区间分析各款交易数据走势
。
目标:订单表(order)
处理分析:订单中可以直接读到的标示有游戏、区服、价格。并且已经有相关配置可以关联此类
信息。
问题分析1:帐号职业,帐号级别等交易信息在订单中没有详细的标示,只可以通过其他信息获
取。
处理思路1:通过订单中的标题大概的分析职业和帐号级别。
标题格式如:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/e3b0977d34cfd2c47d05a1dc463731bb.png)
处理思路:从标题中提取出职业和帐号等级。
职业:
substr
(
o5.bizoffername,
instr(o5.bizoffername,'【',1,1)+1,
instr(o5.bizoffername,' ',1,1)-(instr(o5.bizoffername,'【',1,1)+1)
)
级别:
substr
(
o5.bizoffername,
instr(o5.bizoffername,' ',1,3)+1,
instr(o5.bizoffername,'级',1,1)-(instr(o5.bizoffername,' ',1,3)+1)
)
处理结果如图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/869458c0da84fbbba9f93fddb95e9736.png)
问题分析2:级别类似'50'这样的是从字符串中提取出来的,作为参数和帐号级别区间维度比较
时会发生无效字符。
处理思路2:果断的想到把字符转化为number,to_number。
问题分析3:转化为to_number后还是会遇到无效字符。
处理思路3:还存在着其他问题,于是创建了一个自定义函数is_number。
CREATE OR REPLACE FUNCTION is_number(parameter VARCHAR2) RETURN NUMBER IS
val NUMBER;
BEGIN
val := TO_NUMBER(NVL(parameter, 'a'));--参数为空则复制字符a
RETURN 1;
EXCEPTION--当遇到'40'这样的TO_NUMBER转化正常,当遇到'40的'时TO_NUMBER异常返回0,
WHEN OTHERS THEN
RETURN 0;
END;
然后看了用思路1处理出来的基础数据,用where IS_NUMBER(级别)=0,发现确实存在一些很少的
处理不规范的'你好20'类似级别字段与number区间判断时就报错了,根源所在。于是只好排除了
这几十条不规则的数据。最终得到业务的需求:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202004/17/c33e8b894393ee70af2d110b57c78287.png)
相关文章推荐
- Oracle从字符串资源中得到想要的数据分析
- 正则表达式的初体验:分析字符串数据
- 正则表达式的初体验:分析字符串数据
- oracle数据占用空间过大的分析
- 第二章(1)oracle的数据分析简述
- 在oracle中得到分页数据
- 获取Oracle表结构时,两种OleDb驱动得到的列数据类型“DATA_TYPE”值的类型不同
- oracle函数+过程,解析字符串信息作为字段,并动态更新数据表
- 昨天客户拿过来7G的oracle数据让分析,体会到了一些编写软件的方法....
- 如何把股票软件的数据导入到数据库(access,sqlserver,oracle)然后自行统计分析?
- 如何用SQL操作oracle的blob字段里的字符串数据!
- oracle(使用TRUACTE删除数据时,提示资源正忙)
- SQL里利用自定义函数Group By 数据得到字符串
- Oracle 删除重复数据之分析函数
- 利用Oracle分析函数row_number和sys_connect_by_path实现多行数据合并为一行
- 正则表达式的初体验:分析字符串数据
- oracle数据类型分析
- 通过ORACLE分析函数过滤重复数据 推荐
- 从分析家中得到股票数据!C#源码 (代码很长,建议火狐)
- 在oracle中插入一条数据,id自动增长,插入之后怎么得到这个id(sequence的使用)