substring Oracle sql

时间:2014-02-04 06:48:46

标签: sql oracle

我需要在oralce中获取String的子字符串,直到找到一个字符。如果未找到Character,则应显示整个字符串

前:

  1. ABC_DEF
  2. XY_Z
  3. PQRS
  4. 预期结果是

    1. ABC
    2. XY
    3. PQRS
    4. 我在下面尝试查询但是如果找不到搜索字符“_”,它将不起作用。

      SELECT SUBSTR('ABC_X', 0, INSTR('ABC_X', '_')-1) AS output
      FROM DUAL
      

2 个答案:

答案 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 $#