我需要在oralce中获取String的子字符串,直到找到一个字符。如果未找到Character,则应显示整个字符串
前:
预期结果是
我在下面尝试查询但是如果找不到搜索字符“_”,它将不起作用。
SELECT SUBSTR('ABC_X', 0, INSTR('ABC_X', '_')-1) AS output
FROM DUAL
答案 0 :(得分:1)
如果INSTR()
找不到该字符,则返回零。因此,我们使用DECODE
将其翻转为字符串本身的长度。否则使用INSTR
返回的位置。
SELECT SUBSTR('ABC_X',0,
DECODE(INSTR('ABC_X', '_'),
0,LENGTH('ABC_X'),
INSTR('ABC_X', '_')-1)) AS output
FROM DUAL;
答案 1 :(得分:1)
你也可以使用正则表达式(类似):
SQL> with t as (
2 select 'ABC_DEF' x from dual union all
3 select 'XY_Z' from dual union all
4 select 'PQRS' from dual union all
5 select '_MJU' from dual union all
6 select 'POI_' from dual union all
7 select 'PAS_PIN_APP' from dual union all
8 select 'LIE$#' from dual
9 )
10 select regexp_substr(x, '[^_]*') from t
11 /
REGEXP_SUBSTR(X,'[^_]*')
--------------------------------------------
ABC
XY
PQRS
POI
PAS
LIE $#