/SQL 我有这些文字:提取一些字符在PL INSTR
${cat};${dog};
我想提取这些:
${dog}
我与INSTR努力,但永诺显示我的最后分号这些:
SELECT substr(field,instr(field,'$',1,2),instr(field,';',1,2)-1),...
任何帮助,请
/SQL 我有这些文字:提取一些字符在PL INSTR
${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()函数返回第二次出现的一组零个或多个不是分号的字符,它们后面跟着一个分号或者结尾线。这使得在列表中的NULL值:
select REGEXP_SUBSTR('${cat};${dog};', '([^;]*)(;|$)', 1, 2, NULL, 1) from dual;
更妙的是,拨打电话到REGEXP_SUBSTR通用,并把它变成你传递一个字符串,你需要的元素和分隔符存储功能,并使其返回字符串。
优点:
- 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;
你需要在分号分隔列表中的第二个条目,或特别是 “$ {}狗”? –