Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 替换子字符串的最后一个匹配项_Oracle_Plsql_Oracle11g - Fatal编程技术网

Oracle 替换子字符串的最后一个匹配项

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

如何最有效地使用PL/SQL进行输出(注意“和”):

abc、123、fgh和qdg

到目前为止,我已经得到了较低的
(替换('.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执行块中实现。