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);

使用SUBSTRING_INDEX

查询

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_indexlength。 为此,我使用了 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。我知道它很难看,但谁知道呢,也许它能以某种方式帮助任何人:) *