查看: 227|回复: 7

[SQL] 请教如何用sql实现这个场景

[复制链接]
论坛徽章:
13
奥迪
日期:2013-10-12 11:06:54狮子座
日期:2015-08-08 19:02:44沸羊羊
日期:2015-04-30 16:38:382015年新春福章
日期:2015-03-06 11:58:39慢羊羊
日期:2015-03-04 14:53:33优秀写手
日期:2015-02-12 06:00:14优秀写手
日期:2015-01-28 06:00:13马上有对象
日期:2014-10-29 13:15:17马上有房
日期:2014-10-26 16:16:04问答徽章
日期:2013-10-15 23:55:50
发表于 2018-11-8 15:30 | 显示全部楼层 |阅读模式
create table test001(name varchar2(2000));
insert into test001 values('[{"key":"2","value":"{\"check_ok\":\"0\",\"aaa\":\"59.00\",\"is_cod\":0}"},{"key":"3","value":"{\"check_ok\":0,\"aaa\":\"59\",\"is_cod\":0}"}]');
commit;

现在想获取到"key":"2","key":"3"。最终返回结果为2,3。请问如何实现?

求职 : 数据库开发
论坛徽章:
24
秀才
日期:2017-08-11 15:38:46秀才
日期:2018-01-02 15:17:54秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22技术图书徽章
日期:2018-01-02 15:18:30秀才
日期:2018-03-01 10:05:18秀才
日期:2018-05-22 15:21:20
发表于 2018-11-8 16:17 | 显示全部楼层
SQL> SELECT key
  2    FROM test001,
  3         TABLE(pljson_table.json_table(test001.name,
  4                                       pljson_varray('[*].key'),
  5                                       pljson_varray('key'),
  6                                       table_mode => 'nested'));
KEY
--------------------------------------------------------------------------------
2
3

SQL>
SQL> SELECT regexp_substr(NAME, '"key":"(.*?)"', 1, LEVEL, NULL, 1) key
  2    FROM test001
  3  CONNECT BY LEVEL <= regexp_count(NAME, '"key":"(.*?)"');
KEY
--------------------------------------------------------------------------------
2
3

第一个 pljson 包 github 上找   我用的 11g 的 oracle 12c 自带 json 查询了

使用道具 举报

回复
论坛徽章:
13
奥迪
日期:2013-10-12 11:06:54狮子座
日期:2015-08-08 19:02:44沸羊羊
日期:2015-04-30 16:38:382015年新春福章
日期:2015-03-06 11:58:39慢羊羊
日期:2015-03-04 14:53:33优秀写手
日期:2015-02-12 06:00:14优秀写手
日期:2015-01-28 06:00:13马上有对象
日期:2014-10-29 13:15:17马上有房
日期:2014-10-26 16:16:04问答徽章
日期:2013-10-15 23:55:50
 楼主| 发表于 2018-11-8 16:29 | 显示全部楼层
却早已分离 发表于 2018-11-8 16:17
SQL> SELECT key
  2    FROM test001,
  3         TABLE(pljson_table.json_table(test001.name,

谢谢回复,如果我希望结果展示为:2,3 是不是还要行列转换下

使用道具 举报

回复
论坛徽章:
533
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2018-11-9 03:48 | 显示全部楼层
却早已分离 发表于 2018-11-8 16:17
SQL> SELECT key
  2    FROM test001,
  3         TABLE(pljson_table.json_table(test001.name,

这个包和12c自带的相比,效率和功能如何?

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
24
秀才
日期:2017-08-11 15:38:46秀才
日期:2018-01-02 15:17:54秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22技术图书徽章
日期:2018-01-02 15:18:30秀才
日期:2018-03-01 10:05:18秀才
日期:2018-05-22 15:21:20
发表于 2018-11-9 09:11 | 显示全部楼层
newkid 发表于 2018-11-9 03:48
这个包和12c自带的相比,效率和功能如何?

12c 的我没试过   但是这些数据库对象 在数据量大的时候执行速度是很慢的 只是可以让代码写的可读性强一点 效率远不如正则表达式    这种计算密集型的操作也不太适合在数据库做..

使用道具 举报

回复
论坛徽章:
346
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:22海蓝宝石
日期:2012-02-20 19:24:27铁扇公主
日期:2012-02-21 15:03:13
发表于 2018-11-9 09:44 | 显示全部楼层
低版本数据库处理json格式,安装一下那个包是个不错的选择,我以前也安装过。。

使用道具 举报

回复
论坛徽章:
13
奥迪
日期:2013-10-12 11:06:54狮子座
日期:2015-08-08 19:02:44沸羊羊
日期:2015-04-30 16:38:382015年新春福章
日期:2015-03-06 11:58:39慢羊羊
日期:2015-03-04 14:53:33优秀写手
日期:2015-02-12 06:00:14优秀写手
日期:2015-01-28 06:00:13马上有对象
日期:2014-10-29 13:15:17马上有房
日期:2014-10-26 16:16:04问答徽章
日期:2013-10-15 23:55:50
 楼主| 发表于 2018-11-9 15:22 | 显示全部楼层
却早已分离 发表于 2018-11-8 16:17
SQL> SELECT key
  2    FROM test001,
  3         TABLE(pljson_table.json_table(test001.name,

请问regexp_substr(NAME, '"key":"(.*?)"', 1, LEVEL, NULL, 1) 这个里面的 null,1 是什么意思?

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
24
秀才
日期:2017-08-11 15:38:46秀才
日期:2018-01-02 15:17:54秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22技术图书徽章
日期:2018-01-02 15:18:30秀才
日期:2018-03-01 10:05:18秀才
日期:2018-05-22 15:21:20
发表于 2018-11-9 22:12 | 显示全部楼层
caisanpx 发表于 2018-11-9 15:22
请问regexp_substr(NAME, '&quot;key&quot;:&quot;(.*?)&quot;', 1, LEVEL, NULL, 1) 这个里面的 null,1 是什么意思?

null 匹配模式 这里不需要 最后一个是取第一个括号里的
来自苹果客户端来自客户端

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表