2010-12-08 58 views
1
select substr(e.orgmessage, 40, 50) as one, 
     orgmessage as original_message 
    from table 

列一個結果是:我想用串並獲得價值按我的模式

00 02182 00363 00008 O PKR  500 01983 00319 

但原來的字符串是:

09:22:12 CASH COUNTERS(C) PKR  1000 02182 00363 00008 O PKR  500 01983 00319 00315 O ***  0 00000 00000 00000 N ***  0 00000 00000 00000 N 

我不能得到子串來返回我想要的。我想要500和1000這樣的值。該字段的數據類型是VARCHAR2(1000 Byte)

+0

你的問題到底是什麼?它會像查看substr的文檔一樣簡單,參數是(source_string,position,length)。還是更復雜?此外,可能有助於選擇代碼並在編輯器(101010)中按下代碼按鈕以使其更具可讀性。 – 2010-12-08 11:24:30

回答

0

使用INSTR查找源字符串中子字符串的位置,然後使用substr從該位置解析出它。

0

如果你的字符串每次都遵循一個規則模式,那麼你應該可以很容易地將你的兩個值拉出來。您的樣本字符串中的500和1000在PKR指標之後。如果字符串是常規的,那麼值開始於字符33和69,每個字符運行9個字符。使用我們可以使用:

select substr(txt, 33, 9) value1, 
     substr(txt, 69, 9) value2 
    from (select '09:22:12 CASH COUNTERS(C) PKR  1000 02182 00363 00008 O PKR  500 01983 00319 00315 O ***  0 00000 00000 00000 N ***  0 00000 00000 00000 N' txt 
      from dual 
     ) 

返回:

VALUE1 VALUE2 
--------- --------- 
    1000  500 

1 row selected. 

如果字符串是不是經常和你需要的串在每個PKR拆分,然後PKR後拉出9個字符,你將不得不使用更好的SQL而不僅僅是一個純粹的substr。