问题描述
|
我有一列的价值是
col1
+ ASM_disK_GROUP_TIER1 / mydb / data / myfile.111.326
i would like to split the string into something like this
ASM_disK_GROUP_TIER1 /mydb/data/myfile.111.326 myfile.111.326
(without the +sign)
however
select regexp_substr(col1,\'[^/]*\') from dual
gives me +ASM_disK_GROUP_TIER1
我不知道如何获得第二部分和第三部分
/mydb/data/myfile.111.326 myfile.111.326
解决方法
Oracle正则表达式支持非常有限-与其他语言不同,后者允许您使用括号来获取匹配的部分,在Oracle中,您只能获取整个匹配的字符串(或以
REGEXP_INSTR
开头或结尾的位置)。
如有必要,可以使用多种方法来解决此问题,使用正则表达式魔术和算术,但是在这种情况下,您应该承认实际上只是在寻找/
的第一个和最后一个出现,并相应地进行编码:
SELECT SUBSTR(col1,2,INSTR(col1,\"/\") - 2) \"Disk Group\",SUBSTR(col1,\"/\")) \"Path\",\"/\",-1)) \"File Name\"
FROM ...
(未测试)。