2009-09-25 89 views
1

得到部分字符串我從Oracle表像這樣的字符串:甲骨文:從一個字符串

SELECT col1 FROM MyTable; 
col1 
part1;part2;part3 
.... 

我怎樣才能從COL1這樣子的第2部分?

SELECT col1, INSTR(col1, ';', 1, ...) SubStrPart2 // string func? 
col1  SubStrPart2 
....  part2 

不知道我在這裏可以使用哪些字符串函數,以便我可以輕鬆地更新它以獲取特定的子字符串部分?

回答

2

如果你想打出的分號,你可以嘗試這樣的事:

select col1 
    , regexp_substr(col1, '^[^;]') as part1 
    , replace(regexp_substr(col1, ';[^;]+;'), ';') as part2 
    , replace(regexp_substr(col1, ';[^;]+$'), ';') as part3 

的替換功能刪除第二個參數的任何occurence如果沒有給出第三個參數。

0

This is a good reference關於這些功能。

SELECT col1, SUBSTR(col1, INSTR(col1, ';', 1, ...)) SubStrPart2 // string func? 
col1  SubStrPart2 
....  part2 

你也可以用CASE聲明工作:

SELECT col1, 
     CASE WHEN INSTR(col1, ';', 1, ...) > 0 
      THEN SUBSTR(col1, INSTR(col1, ';', 1, ...)) 
      ELSE 'Other value' 
     END AS SubStrPart2 
... 

these examples見。

0

如果你想在第一和第二次出現之間COL1的「切片」「;」,排除在外,那麼正確的做法shoule是這樣的...:

select substr(col1, 
       instr(col1, ';', 1, 1)+1, 
       instr(col1, ';', 1, 2)-instr(col1, ';', 1, 1)-1) 

這是一個有點複雜,因爲你需要指定要採取的第一個字符,然後指定要採用的字符數(這裏可能有一個off-by-one,需要檢查,但我確實相信+1和-1是正確的)。