Oracle 删除3个不同特定字符后的字符
我在使用oracle获得以下示例的结果时遇到了一个问题。我在字段a中有很多不同的数据,需要做一些步骤(如下所示)才能在字段B中得到结果 例如: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
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行程。但我的问题仍然没有解决。我需要删除列中所有行的字符。谢谢!!我得到了我想要的结果。