Oracle:从字符串中获取部分字符串

时间:2009-09-25 17:16:13

标签: sql oracle plsql

我有一个来自oracle表的字符串,如下所示:

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

如何从col1获取子字符串,例如part2?

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

不确定我可以在这里使用哪些字符串函数,以便我可以轻松更新它以获取特定的子字符串部分?

3 个答案:

答案 0 :(得分:2)

如果你想分开分号,你可以尝试这样的事情:

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

如果没有给出第三个参数,则替换功能会删除第二个参数的任何出现。

答案 1 :(得分: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

答案 2 :(得分:0)

如果你想要第一次和第二次出现';'之间的col1“切片”,排除,那么正确的方法应该像......:

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

它有点复杂,因为你需要指定要采用的第一个字符,然后指定要采用的字符数(这里可能有一个一个,需要检查,但我相信那些+1和 - 1是正确的。)