2013-06-04 81 views
0

我需要幫助來解碼字符串。我想我需要一個PL/SQL腳本來解碼字符串,但我在PL/SQL方面的知識並不特別。解碼字符串至今

我有一個包含7列的

  • 首先科拉姆一個表包括Objectnumber
  • 第二列包括一年
  • 第三列包括一些屬於下一個領域
  • 第四欄包括描述最後3個字段的文本
  • 並且第5至7列包括應該被解碼的字符串。
  • 列5至7(T1,T2,T3)應解碼爲一個日期。 (每個數字是物體移動的一天,「=」(等於)或「0」(零)表示物體在這一天不移動)
  • 該數字還描述了一天。

1 = Monday 
2 = Tuesday 
3 = Wednesday 
4 = Thursday 
5 = Friday 
6 = Saturday 
7 = Sunday 
8 = Holiday (25.12 =Christmas day) 
  • 的T1字段具有23的長度,這是指從2012年9月12日的日期的開始和2012年12月31日上結束
  • 的T2字段具有從長度181表示日期從01.01.2013開始到2013年6月30日結束
  • T3字段的長度從167開始,這意味着日期從2013年7月1日開始到2013年12月14日結束

的T1場總是結束於31.12.XXYY 和提起的T2和T3啓動總是在同一天開始T2上01.01.XXYY及T3中的第一行我在2013年7月1日上

開始具有編號8和文本字段「tgl」且位於T1-T3字段 後面的對象1244,關於這一點,我可以看到對象1244每天從2012年12月12日開始移動到2013年12月14日具有編號6和27的對象120僅移動在工作日和星期六 和對象169有第13和T1到T3字段只有7或8這意味着此對象只在星期日和假日移動

表例如:

object Year Num text T1       T2                                              T3 
1244 2013 8  tgl  71234567123456718845671 8345671234567123456712345671234567123456712345671234567123456712345671234567123456712345678234567123456712345671234567128456712385671234567823456712385671234567123456712345671234567 12345671234567123456712345671234567123456712385671234567123456712345671234567123456712345671234567123456712345671234587123486712345671234567123456712345671234567123456 
120 2013 6  Sa  ======6======6======6== ====6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6= =====6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======6======8======6======6======6======6======6======6======6 
120 2013 27 X(Sa) =12345==12345==1==45==1 =345==12345==12345==12345==12345==12345==12345==12345==12345==12345==12345==12345==12345===2345==12345==12345==12345==12=45==123=5==12345===2345==123=5==12345==12345==12345==12345== 12345==12345==12345==12345==12345==12345==123=5==12345==12345==12345==12345==12345==12345==12345==12345==12345==12345==1234===12345==12345==12345==12345==12345==12345= 
169 2013 13 +  7======7======7=88===7= 8====7======7======7======7======7======7======7======7======7======7======7======7======78=====7======7======7======7==8===7===8==7======78=====7===8==7======7======7======7======7 ======7======7======7======7======7======7===8==7======7======7======7======7======7======7======7======7======7=====87====8=7======7======7======7======7======7====== 

而我需要的是: 我需要一個對象的所有日子裏移動時(應該是SQL語句可用) 所以行對象,新年,NUM,文本解碼一天

Example: 
Object Year Num  text  Day 
1244  2013 8  tgl  09.12.2012 
1244  2013 8  tgl  10.12.2012 
1244  2013 8  tgl  11.12.2012 
... .... 
+1

我很想知道什麼樣的系統會產生這種數據。 – Noel

回答

2

它看起來像T1-T3的行爲就像一個日曆。我無法理解爲什麼數據分成三列。我會假設T1||T2||T3是一個日曆,每個字母是一年中以01-01-YEAR開頭的一天,使用您自己的一套業務規則進行修改。

它看起來並不像日曆事情的號碼查詢等你的問題表現爲一個簡單的支點,你可以用不同的方法,如解決(SQLFiddle):

SQL> SELECT ID, YEAR, num, text, substr(t1 || t2 || t3, lvl, 1) subst, 
    2   to_date(YEAR||'-01-01', 'YYYY-MM-DD') + lvl - 1 dt 
    3 FROM DATA 
    4 CROSS JOIN (SELECT ROWNUM lvl 
    5     FROM dual 
    6    CONNECT BY LEVEL <= (SELECT MAX(length(t1 || t2 || t3)) 
    7          FROM DATA)) 
    8 WHERE substr(t1 || t2 || t3, lvl, 1) != '=' 
    9 ORDER BY 1 DESC, lvl; 

     ID  YEAR  NUM TEXT   SUBST DT 
---------- ---------- ---------- --------------- ------ ----------- 
     1244  2013   8 tgl    7  01/01/2013 
     1244  2013   8 tgl    1  02/01/2013 
     1244  2013   8 tgl    2  03/01/2013 
     1244  2013   8 tgl    3  04/01/2013 
     1244  2013   8 tgl    4  05/01/2013 
     1244  2013   8 tgl    5  06/01/2013 
+0

嗨,非常感謝您的幫助!問題是,表格會從一個非常古老的acces db中填充:-(。我必須檢查一下。 非常感謝! – user1856981