替换最后一次出现的子串

时间:2015-12-22 16:31:54

标签: oracle plsql oracle11g

鉴于此字符串:

  

名为.abc,0.123,.FGH,.QDG

如何最有效地使用PL / SQL输出:

  

abc,123,fgh和qdg

到目前为止,我已经获得了LOWER(REPLACE('.ABC,.123,.FGH,.QDG', '.', ' ')),产生了

  

abc,123,fgh,qdg

如何在“fgh”之后但在“qdg”(“fgh,and qdg”)之前获得“和”?我必须使用INSTR()SUBSTR(),还是有一个函数可以用“和”替换最后一个空格?

2 个答案:

答案 0 :(得分:3)

以您已使用的内容为基础......将regexp_replaceinstr

一起使用
with cte as(
select LOWER(REPLACE('.ABC,.123,.FGH,.QDG', '.', ' ')) as val from dual)
select regexp_replace(val,' ',' and ',instr(val ,' ',-1))
from cte;

regexp_replace(val,', ',' and ',instr(val ,', ',-1))如果您想要删除最后一个逗号。

enter image description here

答案 1 :(得分:1)

这样做:

select substr(text, 1, last_space_pos) || 'and' || substr(text, last_space_pos) new_text
from
(select text, instr(text, ' ', -1) last_space_pos
 from
 (select LOWER(REPLACE('.ABC,.123,.FGH,.QDG', '.', ' ')) text from dual)
);

函数调用instr(text, ' ', -1)找到最后一个空格的位置,substr调用在该点处断开字符串,以便我们可以插入'和'。使用嵌套的select语句可以避免重复任何复杂的表达式。