从char位置到下一个位置选择数据

时间:2016-03-16 14:28:03

标签: string text teradata

我有一个这样的文字列 -

Col = '/a/bbb/cc/aaa/ddd'

我想只输出 bbb 。这就是第二个“/”和第三个“/”之间的所有内容。我应该怎么做呢?

4 个答案:

答案 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)

使用 SUBSTRING_INDEX

<强>查询

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。我知道它非常难看,但是谁知道,也许它可以帮助任何人以某种方式:) *