2009-09-25 96 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是正确的)。