Oracle 删除3个不同特定字符后的字符

Oracle 删除3个不同特定字符后的字符,oracle,oracle11g,Oracle,Oracle11g,我在使用oracle获得以下示例的结果时遇到了一个问题。我在字段a中有很多不同的数据,需要做一些步骤(如下所示)才能在字段B中得到结果 例如: LM2963NAMBLK-P/NOPB/SA结果:LM2963NAM 删除'/'之后的所有字符 删除字符'-P' 删除字符'BLK' 嗯,这是一种方法 select substr( substr( substr( 'LM2963NAMBLK-P/NOPB',1, slash_pos-1 ), 1, dash_p_pos-1 ), 1, blk_pos

我在使用oracle获得以下示例的结果时遇到了一个问题。我在字段a中有很多不同的数据,需要做一些步骤(如下所示)才能在字段B中得到结果

例如:
LM2963NAMBLK-P/NOPB/SA
结果:
LM2963NAM

  • 删除
    '/'之后的所有字符
  • 删除字符
    '-P'
  • 删除字符
    'BLK'

  • 嗯,这是一种方法

      select substr( substr( substr( 'LM2963NAMBLK-P/NOPB',1, slash_pos-1 ), 1, dash_p_pos-1 ), 1, blk_pos-1 )
      from
      (
      select 'LM2963NAMBLK-P/NOPB'
         , instr( 'LM2963NAMBLK-P/NOPB', '/' ) slash_pos
         , instr( 'LM2963NAMBLK-P/NOPB', '-P' ) dash_p_pos
         , instr( 'LM2963NAMBLK-P/NOPB', 'BLK' ) blk_pos
      from dual
      );
    
    SUBSTR(SU
    ---------
    LM2963NAM
    
    以下各项应起作用:

    select A,
      regexp_replace(
        regexp_replace(A, '-P|/.*', ''),
        '^(.*)BLK$', '\1'
        ) B
    --remainder of query
    

    嵌套的regexp_replace将用空字符串替换-p或/后跟0个或更多出现的任何字符,留下所需的输出以及结尾可能的BLK。|表示“或”。我目前没有登录到oracle,但-和/不需要转义,因为/在oracle正则表达式中不是一个特殊字符,并且-只是[]中的一个特殊字符。如果存在,则外部regexp_replace将用空字符串替换结尾处的BLK,如果不存在,则返回字符串。

    这一点不清楚。“删除字符”是什么意思?删除一个字符,还是删除“标记”后面的所有字符?那么,您是否需要按此顺序执行三次删除?如果输入字符串中有多个“/”会发生什么情况?而且,似乎您从字符串中删除了“标记”和字符(或多个字符),而不仅仅是3个不同的特定“标记”后面的字符。对于一个“近似”(不清楚,令人困惑)的问题,你不能得到一个好的答案。是的。我对这个不清楚的问题的错误。它应该删除“标记”后面的所有字段字符。通常,当使用m.excel 1步骤:我将为字段2步骤:如果字段有“-P”,我将使用以下公式删除它=如果(右(A2,2)=“-P”,左(A2,LEN(A2)-2),A2),然后第三步:使用此公式删除“BLK”=if(右(B2,3)=“BLK”,左(B2,LEN(B2)-3),B2)以获得最终结果。感谢大家。。评论@Wistful Thinker对我来说就是成功。选择一个,regexp_replace(regexp_replace(A,'-P |/.''',''),'^(.*)BLK$','\1')b行程。但我的问题仍然没有解决。我需要删除列中所有行的字符。谢谢!!我得到了我想要的结果。