永发信息网

Oracle字符串的拆分和拼接

答案:4  悬赏:40  手机版
解决时间 2021-02-24 00:18
最好用存储过程实现:
如下json字符串中的指定三个字段需要拼接成comicPkgList

原字符串:
{"IsSmsConfirm":false,"productID":"MDSP3331111","autoReceive":false,"supCycle":1}

期望转换后的:
{"comicPkgList":[{"IsSmsConfirm":false,"productID":"MDSP3331111","supCycle":1}],"autoReceive":false}
最佳答案


如果是固定的格式,那就好办,检测字段中的“,”分割成四段,然后按要求接起来。
使用函数好些,可以直接调用。
函数写好:已经测试过。
CREATE OR REPLACE FUNCTION json_montage (JSON IN VARCHAR2) RETURN VARCHAR2 IS
In_JSON  VARCHAr2(4096);
v_JSON  VARCHAr2(4096) DEFAULT '{"comicPkgList":[{J1,J2,J4}],J3}';
v_J1  VARCHAr2(4096);
v_J2  VARCHAr2(4096);
v_J3  VARCHAr2(4096);
v_J4  VARCHAr2(4096);
v_split VARCHAr2(10) DEFAULT ',';
len NUMBER(10) default 0;
place NUMBER(10) default 2;

BEGIN
 In_JSON :=JSON;

   In_JSON := RTRIm(LTRIm(In_JSON));
   place := INSTR(In_JSON,v_split,2,1);
   len := place -1 -1;
   v_J1 := SUBSTr(In_JSON,2,len);
   len := INSTR(In_JSON,v_split,2,2) - place -1-0;
   v_J2 := SUBSTr(In_JSON,place+1,len);
   place := INSTR(In_JSON,v_split,2,2);

   len := INSTR(In_JSON,v_split,2,3) - place -1-0;
   v_J3 := SUBSTr(In_JSON,place+1,len);
   place := INSTR(In_JSON,v_split,2,3);

   len := LENGTH(In_JSON) - place -1;
   v_J4 := SUBSTr(In_JSON,place+1,len);


   v_JSON := '{"comicPkgList":[{' || v_J1 || ',' || v_J2 || ',' || v_J4 || '}],' || v_J3 || '}';

   IF v_JSON = '{"comicPkgList":[{J1,J2,J4}],J3}' THEN
    v_JSON :='ERROR';
   END IF;
   RETURN v_JSON;
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
       NULL;
     WHEN OTHERS THEN
       RAISE;
END json_montage;
/
全部回答
这是json串,和数据库没有关系,如果纯粹的字符串拼接用 ||
Oracle支持java的存储过程,可以使用相关的json方法进行处理 Oracle解析复杂json的方法
这样不就行了吗 创建表 create table test (id varchar2(10), name varchar2(10)) insert into test values ('wq','王强'); insert into test values ('lm','李明'); insert into test values ('xh','小红');创建函数 create or replace function f_str (v_str varchar2) return varchar2 is result varchar2(100); begin  select wm_concat(name) into result from test  where id in  (select c from  (with test as (select v_str c from dual)  select substr(t.ca,instr(t.ca, ',', 1, c.lv) + 1,instr(t.ca, ',', 1, c.lv + 1) - (instr(t.ca, ',', 1, c.lv) + 1)) as c  from (select ',' || c || ',' as ca,length(c || ',') - nvl(length(replace(c, ',')),0) as cnt from test) t,  (select level lv from dual connect by level <= 100) c where c.lv <= t.cnt)); return result; end;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
天柱寄售行这个地址在什么地方,我要处理点事
吃什么食物能祛除眼袋和黑眼圈
想买台超极本,选择宏基的I5还是I7?
电信卡手机服务密码有什么用?
约沙法在位期间做了什么,以致他可以成为犹大
2011年6月23日,T公司与员工叶某签订了《劳动
女生来大姨妈能吃泡面吗?
国税新村在什么地方啊,我要过去处理事情
我知道我们不可能,他花心到处撩妹,我是乖乖
混蛋用粤语怎么说?王8蛋用粤语怎么说?
四季梅有毒吗
好听的男生网名三个字
太榆路/汇通北路(路口)我想知道这个在什么地
甘孜州2017年上半年公务员排名什么时候出来
怎样制定花期调控技术方案?
推荐资讯
二噁英化合物是一类稳定的亲脂性固体物质,分
二十里铺社区在什么地方啊,我要过去处理事情
有没有人觉得景甜脸大
宋人绝句艺术谈季羡林 宋人绝句.也是名家辈出
【buyren】...allthechildrenwouldbuysweets.
急性根尖周炎应急处理的主要原则是()
天元教育在哪里啊,我有事要去这个地方
这个肚型是入盆的肚型吗?
怎样将音乐传入俄罗斯社交网站vk
请老师编一个通达信kdj20以下,连续两次金叉
蹦极的人在下落过程中速度和受力是如何变化的
有时候车子就走有时候车子不走有时候空转转人
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?