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

时间:2017-03-14 02:15:49

标签: oracle oracle11g

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

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

  1. 删除'/'
  2. 之后的所有字符
  3. 删除字符'-P'
  4. 删除字符'BLK'

2 个答案:

答案 0 :(得分:0)

嗯,这是一种方式......

  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

答案 1 :(得分:0)

以下应该有效:

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

嵌套的regexp_replace将替换-P或/后跟0或更多出现任何带有空字符串的字符,从而为您留下所需的输出以及最后可能的BLK。 |表示"或。"我目前没有登录到oracle,但是 - 并且/不应该被转义为/不是Oracle正则表达式中的特殊字符而且 - 只是[]中的特殊字符。外部的regexp_replace将使用空字符串替换最后的BLK(如果它在那里),或者只返回你的字符串(如果它不在那里)。