Plsql 使用instr提取一些字符

Plsql 使用instr提取一些字符,plsql,Plsql,在pl/sql中 我有以下案文: ${cat};${dog}; 我想摘录以下内容: ${dog} 我正在尝试使用instr,但始终显示最后一个分号: SELECT substr(field,instr(field,'$',1,2),instr(field,';',1,2)-1),... 请提供任何帮助函数被定义为substr(str,pos,len),因此您必须将第三个参数中的位置减去substr(str,pos1,pos2-pos1)不确定它是否是您需要的,但我会将其编码为: selec

在pl/sql中 我有以下案文:

${cat};${dog};
我想摘录以下内容:

${dog}
我正在尝试使用instr,但始终显示最后一个分号:

SELECT substr(field,instr(field,'$',1,2),instr(field,';',1,2)-1),...

请提供任何帮助

函数被定义为
substr(str,pos,len)
,因此您必须将第三个参数中的位置减去
substr(str,pos1,pos2-pos1)
不确定它是否是您需要的,但我会将其编码为:

select substr('${cat};${dog};'
             ,instr('${cat};${dog};',';',1,1)+1
             ,instr('${cat};${dog};',';',1,2)-instr('${cat};${dog};',';',1,1)-1
             )
  from dual;

如果要查找列表中的第二项,可以使用REGEXP_SUBSTR()返回第二次出现的一组非分号的零个或多个字符,这些字符后跟分号或行尾。这允许列表中出现空值:

select REGEXP_SUBSTR('${cat};${dog};', '([^;]*)(;|$)', 1, 2, NULL, 1) from dual;
更好的是,调用REGEXP_SUBSTR generic并将其放入存储函数中,传递字符串、所需元素和分隔符,然后让它返回字符串

好处:

-   Logic and code is encapsulated in a reusable function all can use without having to understand the regular expression syntax (but still get the power from it)
-   There is a consistent, simple way to call it
-   Code becomes MUCH easier to follow/debug
-   If it needs to change there is only one place to change it
-   A particular element of a list can be SELECTed
-   An element of a list can be used in a WHERE clause
以下是函数定义本身:

  FUNCTION  GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
    BEGIN
      RETURN REGEXP_SUBSTR(string_in, '([^\'||delimiter_in || ']*)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
  END GET_LIST_ELEMENT; 

您是否需要分号分隔列表中的第二个条目,或者特别是“${dog}”?