Select 从字符位置到下一个的数据
Select data from char position to the next
我有一栏是这样的文字-
Col = '/a/bbb/cc/aaa/ddd'
我只想输出bbb。这是第二个“/”和第三个“/”之间的所有内容。我应该怎么做?
您可以使用 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);
查询
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX(
column_name, '/', 3
), '/', -1
) AS new_column_name
FROM table_name;
您可以使用
STRTOK('/a/bbb/cc/aaa/ddd', '/', 2)
或
REGEXP_SUBSTR('/a/bbb/cc/aaa/ddd', '[^/]+',1,2)
是否可以使用连续的分隔符,即 '//bbb/cc/aaa/ddd'
?
如果是,bbb
还是正确的结果吗?
我有 Oracle SQL Developer(版本 4.0.0.13) 但它无法识别方法 SUBSTRING_INDEX,所以我不得不借助以下方法来完成它:
SUBSTR(your_string,starting_index,长度).
但是我们需要先找到starting_index和length。
为此,我使用了 INSTR(your_string,'string_to_find'[starting_index])。
首先我找到了第一个“/”的索引:
SELECT INSTR('/a/bbb/cc/aaa/ddd', '/') from dual;
第二个“/”的索引(起始索引将为本次查询结果+1):
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
最后,我得到了这段代码:
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。我知道它很难看,但谁知道呢,也许它能以某种方式帮助任何人:) *
我有一栏是这样的文字-
Col = '/a/bbb/cc/aaa/ddd'
我只想输出bbb。这是第二个“/”和第三个“/”之间的所有内容。我应该怎么做?
您可以使用 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);
查询
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX(
column_name, '/', 3
), '/', -1
) AS new_column_name
FROM table_name;
您可以使用
STRTOK('/a/bbb/cc/aaa/ddd', '/', 2)
或
REGEXP_SUBSTR('/a/bbb/cc/aaa/ddd', '[^/]+',1,2)
是否可以使用连续的分隔符,即 '//bbb/cc/aaa/ddd'
?
如果是,bbb
还是正确的结果吗?
我有 Oracle SQL Developer(版本 4.0.0.13) 但它无法识别方法 SUBSTRING_INDEX,所以我不得不借助以下方法来完成它: SUBSTR(your_string,starting_index,长度).
但是我们需要先找到starting_index和length。 为此,我使用了 INSTR(your_string,'string_to_find'[starting_index])。
首先我找到了第一个“/”的索引:
SELECT INSTR('/a/bbb/cc/aaa/ddd', '/') from dual;
第二个“/”的索引(起始索引将为本次查询结果+1):
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
最后,我得到了这段代码:
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。我知道它很难看,但谁知道呢,也许它能以某种方式帮助任何人:) *