Oracle 替换子字符串的最后一个匹配项
给定此字符串: .ABC、.123、.FGH、.QDG 如何最有效地使用PL/SQL进行输出(注意“和”): abc、123、fgh和qdg 到目前为止,我已经得到了较低的Oracle 替换子字符串的最后一个匹配项,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,给定此字符串: .ABC、.123、.FGH、.QDG 如何最有效地使用PL/SQL进行输出(注意“和”): abc、123、fgh和qdg 到目前为止,我已经得到了较低的(替换('.ABC,.123,.FGH,.QDG','.',''),这将产生 abc,123,fgh,qdg 如何在“fgh”之后,但在“qdg”(“fgh,and qdg”)之前得到“and”?我必须使用INSTR()和SUBSTR(),或者是否有一个函数可以在您已经使用的基础上,将最后一个空格替换为“and”。。。使用re
(替换('.ABC,.123,.FGH,.QDG','.','')
,这将产生
abc,123,fgh,qdg
如何在“fgh”之后,但在“qdg”(“fgh,and qdg”)之前得到“and”?我必须使用
INSTR()
和SUBSTR()
,或者是否有一个函数可以在您已经使用的基础上,将最后一个空格替换为“and”。。。使用regexp\u将替换为instr
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,,,,'和',instr(val,,,,,-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
调用在该点中断字符串,以便插入“and”。使用嵌套的select
语句可以避免重复任何复杂的表达式。这一点很重要,因为它更容易在PL/SQL执行块中实现。