zoukankan      html  css  js  c++  java
  • Oracle从字符串资源中得到想要的数据分析

    [oracle]从字符串资源中得到想要的数据分析
    需求:订单分析,按照游戏,帐号级别,游戏帐号职业,区服,价格区间分析各款交易数据走势


    目标:订单表(order)
    处理分析:订单中可以直接读到的标示有游戏、区服、价格。并且已经有相关配置可以关联此类

    信息。
    问题分析1:帐号职业,帐号级别等交易信息在订单中没有详细的标示,只可以通过其他信息获

    取。
    处理思路1:通过订单中的标题大概的分析职业和帐号级别。
    标题格式如:

    处理思路:从标题中提取出职业和帐号等级。
    职业:
    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)

    处理结果如图:

    问题分析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区间判断时就报错了,根源所在。于是只好排除了

    这几十条不规则的数据。最终得到业务的需求:

  • 相关阅读:
    poj 2337 欧拉回路输出最小字典序路径 ***
    hdu 4831
    hdu 4832 dp ***
    hdu 4833 离散化+dp ****
    hdu 4006 优先队列 2011大连赛区网络赛F **
    hdu 4005 双联通 2011大连赛区网络赛E *****
    hdu 4004 二分 2011大连赛区网络赛D
    hdu 4003 树形dp+分组背包 2011大连赛区网络赛C
    hdu 4002 欧拉函数 2011大连赛区网络赛B
    跨域经验总结
  • 原文地址:https://www.cnblogs.com/shengs/p/4089266.html
Copyright © 2011-2022 走看看