从类似的Stack Overflow线程获取示例, Remove all characters after a specific character in PL/SQL 和 How to Select a substring in Oracle SQL up to a specific character?
我想在字符串出现之前只检索第一个字符。
示例:
STRING_EXAMPLE
TREE_OF_APPLES
结果数据集应仅显示STRING_EXAM
和TREE_OF_AP
,因为PLE
是我的分隔符
每当我使用下面的REGEXP_SUBSTR
时,它只会STRING_
,因为REGEXP_SUBSTR
将PLE
视为单独的表达式(P, L and E)
,而不是单个表达式{{} 1}}。
(PLE)
如果不使用多个INSTR和SUBSTR,我怎么能这样做?
谢谢。
答案 0 :(得分:1)
您的查询存在的问题是,如果您使用[^PLE]
,它将匹配P或L或E以外的任何字符。您正在寻找PLE的连续出现。所以,使用
select REGEXP_SUBSTR(colname,'(.+)PLE',1,1,null,1)
from tablename
这会将子字符串返回到字符串中最后一次出现的PLE。
如果字符串包含多个PLE实例,并且只需要提取第一次出现的子字符串,请使用
select REGEXP_SUBSTR(colname,'(.+?)PLE',1,1,null,1)
from tablename
答案 1 :(得分:1)
为什么要使用正则表达式?
select substr(colname, 1, instr(colname, 'PLE')-1) from...
会更有效率。
with
inputs( colname ) as (
select 'FIRST_EXAMPLE' from dual union all
select 'IMPLEMENTATION' from dual union all
select 'PARIS' from dual union all
select 'PLEONASM' from dual
)
select colname, substr(colname, 1, instr(colname, 'PLE')-1) as result
from inputs
;
COLNAME RESULT
-------------- ----------
FIRST_EXAMPLE FIRST_EXAM
IMPLEMENTATION IM
PARIS
PLEONASM