Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 选择从字符位置到下一个字符位置的数据_String_Text_Teradata - Fatal编程技术网

String 选择从字符位置到下一个字符位置的数据

String 选择从字符位置到下一个字符位置的数据,string,text,teradata,String,Text,Teradata,我有一个这样的专栏- Col = '/a/bbb/cc/aaa/ddd' 我只想输出bbb。这就是第二个“/”和第三个“/”之间的所有内容。我应该怎么做呢?您可以使用子字符串索引函数() 例如: SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('/a/bbb/cc/aaa/ddd','/',3),'/',-1); 使用 查询 SELECT SUBSTRING_INDEX( SUBSTRING_INDEX( co

我有一个这样的专栏-

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

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

您可以使用子字符串索引函数()

例如:

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)

是否可以使用连续的delmiter,即
“//bbb/cc/aaa/ddd”
? 如果是,那么
bbb
仍然是正确的结果吗?

我有Oracle SQL Developer(版本4.0.0.13),但它无法识别方法子字符串索引,因此我必须借助以下方法进行操作: SUBSTR(您的字符串、起始索引、长度)

但我们需要先找到起始索引和长度。 我用了INSTR(你的字符串,'string\u to\u find'[,start\u index])

首先我发现First“/”的索引如下:

        SELECT INSTR('/a/bbb/cc/aaa/ddd', '/') from dual;
第二个“/”的索引(起始索引将是此查询的结果+1):

第二个和第三个“/”之间的字符串长度将是第三个“/”的索引-第二个“/”的索引-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;

*顺便说一句,我知道它很难看,但谁知道呢,也许它能帮助任何人:)*

STRTOK(“/a/bbb/cc/aaa/ddd”,“2”)工作得很好。感谢
INSTR
,[发生]有第四个选项,第二个选项使用
2
,第三个选项使用
3
。Oracle还支持
REGEXP\u SUBSTR
        SELECT INSTR('/a/bbb/cc/aaa/ddd', '/',
          (SELECT INSTR('/a/bbb/cc/aaa/ddd', '/')+1 FROM dual
          ))
        FROM dual;
        (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;