如何在特定字符后获取其余的字符串?
我有一个字符串'a|b|c|2|:x80|3|rr|'
,我想在第三次出现|
之后得到结果。因此结果应类似于2|:x80|3|rr|
查询
select REGEXP_SUBSTR('a|b|c|2|:x80|3|rr|','[^|]+$',1,4)
from dual
返回我为空
答案 0 :(得分:2)
使用SUBSTR / INSTR
组合
WITH t ( s ) AS (
SELECT 'a|b|c|2|:x80|3|rr|'
FROM dual
) SELECT substr(s,instr(s,'|',1,3) + 1)
FROM t;
答案 1 :(得分:0)
我建议通过将regexp_substr
,regexp_count
和listagg
一起使用作为一个好方法,
select listagg(str) within group (order by lvl)
as "Result String"
from
(
with t(str) as
(
select 'a|b|c|2|:x80|3|rr|' from dual
)
select level-1 as lvl,
regexp_substr(str,'(.*?)(\||$)',1,level) as str
from dual
cross join t
connect by level <= regexp_count('a|b|c|2|:x80|3|rr|','\|')
)
where lvl >= 3;
答案 2 :(得分:0)
REGEXP_REPLACE()
将解决问题。跳过3组,然后再接上管道,然后替换为第二组,这是该行的其余部分(固定在最后)。
SQL> select regexp_replace('a|b|c|2|:x80|3|rr|', '(.*?\|){3}(.*)$', '\2') trimmed
2 from dual;
TRIMMED
------------
2|:x80|3|rr|
SQL>
答案 3 :(得分:0)
如果您使用的是oracle 11g及更高版本,则可以指定一个子表达式来返回,如下所示:
F. public static <? extends T> List<T> backwards(List<T> input)
G. public static <? super T> List<T> backwards(List<T> input)
答案 4 :(得分:0)
Erkko,
您需要使用-u
和git push
或SUBSTR
的组合。
您的查询将如下所示。 (不使用正则表达式)
REGEXP_INSTR
您的查询将如下所示。 (要使用正则表达式)
INSTR
说明:
首先,您将需要找到您要提到的字符串的位置。因此,在您的情况下,SELECT SUBSTR('a|b|c|2|:x80|3|rr|',INSTR('a|b|c|2|:x80|3|rr|','|',1,3)+1) from dual;
位于第6位。因此+1将是您开始使用子字符串的位置。
第二,从原始字符串开始,从该位置+1到无限的子字符串。(字符串结束的地方)
示例:
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=6fd782db95f575201eded084493232ee