我在使用oracle获取结果时遇到问题。我在字段A中有很多不同的数据,需要做一些步骤(如下所示)才能成为字段B中的结果。
例如:
LM2963NAMBLK-P/NOPB/SA
和结果:LM2963NAM
'/'
'-P'
'BLK'
答案 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(如果它在那里),或者只返回你的字符串(如果它不在那里)。