我有一个这样的文字列 -
Col = '/a/bbb/cc/aaa/ddd'
我想只输出 bbb 。这就是第二个“/”和第三个“/”之间的所有内容。我应该怎么做呢?
答案 0 :(得分:2)
您可以使用
STRTOK('/a/bbb/cc/aaa/ddd', '/', 2)
或
REGEXP_SUBSTR('/a/bbb/cc/aaa/ddd', '[^/]+',1,2)
是否可以使用连续的delmiter,即'//bbb/cc/aaa/ddd'
?
如果是,bbb
仍然是正确的结果吗?
答案 1 :(得分:0)
您可以使用SUBSTRING_INDEX函数(http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index)
示例:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('/a/bbb/cc/aaa/ddd','/',3),'/',-1);
答案 2 :(得分:0)
<强>查询强>
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX(
column_name, '/', 3
), '/', -1
) AS new_column_name
FROM table_name;
答案 3 :(得分:0)
我有 Oracle SQL Developer(版本4.0.0.13)并且它没有识别方法 SUBSTRING_INDEX ,所以我必须借助于以下方法: SUBSTR(your_string,starting_index,length)。
但我们需要先找到 starting_index 和 length 。 我使用了 INSTR(your_string,&#39; string_to_find&#39; [,starting_index])。
首先我找到了第一个&#34; /&#34;的索引。那样:
SELECT INSTR('/a/bbb/cc/aaa/ddd', '/') from dual;
第二个&#34; /&#34;的索引(起始索引将是此查询+1的结果):
SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/')+1 FROM dual
))
FROM dual;
第二个和第三个之间的字符串长度&#39; /&#39;将是指数的第三个&#39; /&#39; - 第二个指数&#39; /&#39; - 1 :
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/')+1 FROM dual
))+1
FROM dual
))
FROM dual
) -
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/')+1 FROM dual
))
FROM dual
)-1
最后,我最终得到了这段代码:
SELECT SUBSTR('/a/bbb/cc/aaa/ddd',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/')+1 FROM dual
))
FROM dual
)+1,
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/')+1 FROM dual
))+1
FROM dual
))
FROM dual
) -
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
(SELECT INSTR('/a/bbb/cc/aaa/ddd', '/')+1 FROM dual
))
FROM dual
)-1)
FROM dual;
* P.S。我知道它非常难看,但是谁知道,也许它可以帮助任何人以某种方式:) *