標籤:blog http io ar sp 資料 on 2014 問題
[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區間判斷時就報錯了,根源所在。於是只好排除了
這幾十條不規則的資料。最終得到業務的需求:
Oracle從字串資源中得到想要的資料分析