当前位置:  开发笔记 > 编程语言 > 正文

如何在Oracle中一起替换多个字符串

如何解决《如何在Oracle中一起替换多个字符串》经验,为你挑选了2个好方法。

我有一个字符串来自"无法付款{1},因为您的付款{2}到期{3}".我希望将{1}替换为某个值,将{2}替换为某个值,将{3}替换为某个值.

是否可以更换所有3合一替换功能?或者有什么方法可以直接编写查询并获取替换值?我想在Oracle存储过程中替换这些字符串原始字符串来自我的一个表我只是在那个表上做select

然后我想将该字符串中的{1},{2},{3}值替换为另一个表中的另一个值



1> hamishmcn..:

虽然不是一个电话,但您可以嵌套replace()电话:

SET mycol = replace( replace(mycol, '{1}', 'myoneval'), '{2}', mytwoval)



2> Florin Ghita..:

如果要替换的变量很多,并且它们在另一个表中,并且变量的数量是变量,则可以使用递归CTE替换它们。下面的例子。在表fg_rulez中,将字符串及其替换字符串放入。在表fg_data中,您有输入字符串。

set define off;
drop table fg_rulez
create table fg_rulez as 
  select 1 id,'<' symbol, 'less than' text from dual
  union all select 2, '>', 'great than' from dual
  union all select 3, '$', 'dollars' from dual
  union all select 4, '&', 'and' from dual;
drop table fg_data;
create table fg_Data AS(
   SELECT 'amount $ must be < 1 & > 2' str FROM dual
   union all
   SELECT 'John is >  Peter & has many $' str FROM dual
   union all
   SELECT 'Eliana is < mary & do not has many $' str FROM dual

   );


WITH  q(str, id) as (
  SELECT str, 0 id 
  FROM fg_Data 
     UNION ALL
  SELECT replace(q.str,symbol,text), fg_rulez.id
  FROM q 
  JOIN fg_rulez 
    ON q.id = fg_rulez.id - 1
)
SELECT str from q where id = (select max(id) from fg_rulez);

所以,一个replace

结果:

amount dollars must be less than 1 and great than 2 
John is great than Peter and has many dollars 
Eliana is less than mary and do not  has many dollars

术语符号而不是变量来自这个重复的问题。

甲骨文11gR2

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有