我有一个来自oracle表的字符串,如下所示:
SELECT col1 FROM MyTable;
col1
part1;part2;part3
....
如何从col1获取子字符串,例如part2?
SELECT col1, INSTR(col1, ';', 1, ...) SubStrPart2 // string func?
col1 SubStrPart2
.... part2
不确定我可以在这里使用哪些字符串函数,以便我可以轻松更新它以获取特定的子字符串部分?
答案 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
...
答案 2 :(得分:0)
如果你想要第一次和第二次出现';'之间的col1“切片”,排除,那么正确的方法应该像......:
select substr(col1,
instr(col1, ';', 1, 1)+1,
instr(col1, ';', 1, 2)-instr(col1, ';', 1, 1)-1)
它有点复杂,因为你需要指定要采用的第一个字符,然后指定要采用的字符数(这里可能有一个一个,需要检查,但我相信那些+1和 - 1是正确的。)