Oracle字符串行拆分成列的三种方式
Oracle字符串行拆分成列的三种方式
--muphy
开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行。
如下一个表table_test的内容如下:
name value
pa 5
pb 6
pc 8
需要查询分别与pa和pb相同的行,参数字符串为:
pi_names=”pa,pb”
如何查询呢,有以下三种方式(根据执行计划分析,效率由低到高排列):
1. 使用Oracle Database 11g Release 2及更高版本时,可以使用递归with子查询:
with a(name, i)
as
(select regexp_substr(pi_names, '[^,]+') name,
substr(pi_names || ',', instr(pi_names, ',') + 1) i
from dual
union all
select regexp_substr(i, '[^,]+'), substr(i, instr(i, ',') + 1)
from a
where instr(i, ',') <> 0)
select t.name, t.value from table_test t inner join a on a.name = t.name
2. 使用connect by语句实现之方式一:
with a as
(select distinct regexp_substr(pi_names, '[^,]+', 1, level) name
from dual
connect by regexp_substr(pi_names, '[^,]+', 1, level) is not null
)
select t.name, t.value from table_test t inner join a on a.name = t.name
3. 使用connect by语句实现之方式二:
with a as
(select regexp_substr(pi_names, '[^,]+', 1, rownum) name
from dual
connect by rownum <= length(pi_names) -
length(replace(pi_names, ',')) + 1)
select t.name, t.value from table_test t inner join a on a.name = t.name
Oracle字符串行拆分成列的三种方式的更多相关文章
- 字符串转换成JSON的三种方式
采用Ajax的项目开发过程中,经常需要将JSON格式的字符串返回到前端,前端解析成JS对象(JSON ).ECMA-262(E3) 中没有将JSON概念写到标准中,但在 ECMA-262(E5) 中J ...
- python:字符串转换成字节的三种方式
str='zifuchuang' 第一种 b'zifuchuang'第二种bytes('zifuchuang',encoding='utf-8')第三种('zifuchuang').encode('u ...
- python:字符串转换成字节的三种方式及字符转码问题
str='zifuchuang' 第一种 b'zifuchuang'第二种bytes('zifuchuang',encoding='utf-8')第三种('zifuchuang').encode('u ...
- js将字符串转换成json的三种方式
1,js自带的eval函数,其中需要添加小括号eval('('+str+')'); function strToJson(str){ var json = eval('(' + str + ')'); ...
- js中将字符串转换成json的三种方式
1,eval方式解析,恐怕这是最早的解析方式了.如下: function strToJson(str){ var json = eval('(' + str + ')'); return json; ...
- Oracle 行转列总结 Case When,Decode,PIVOT 三种方式 - 转
最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"Decode",索性我就总结一下,一共三种方式 --======= ...
- oracle 多行转多列查询
oracle 多行转多列查询 ---create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);inse ...
- Oracle 多行转多列
Oracle 多行转多列,列值转为列名 前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的 ...
- JavaScript进阶(四)js字符串转换成数字的三种方法
js字符串转换成数字的三种方法 在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b. ...
随机推荐
- 分享基于 websocket 网页端聊天室
博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...
- .NET(C#)能开发出什么样的APP?盘点那些通过Smobiler开发的移动应用
.NET程序员一定最熟悉所见即所得式开发,熟悉的Visual Studio开发界面,熟悉的C#代码. Smobiler也是因为具备这样的特性,使开发人员,可以在VisualStudio上,像开发Win ...
- WinForm的EXE破解(基于IL修改)
一.目的与目标 1.1 主题目的 部门新人较多,希望通过本次分享让同学们对以下知识点有个认识: 破解原理 IL原理 强签名与加密 resx文件 由于时间有限,本文作为部门分享演示过程中辅助性文档,会对 ...
- 学JAVA第十六 天,JAVA多态
今天老师讲了多态的使用 多态是同一个行为具有多个不同表现形式或形态的能力. 多态的优点: 1. 消除类型之间的耦合关系 2. 可替换性 3. 可扩充性 4. 接口性 5. 灵活性 6. 简化性 我个 ...
- 安卓9.0系统机器(亲测有效)激活Xposed框架的步骤
对于喜欢玩手机的哥们来说,经常会用到xposed框架及其种类繁多功能无敌的模块,对于5.0以下的系统版本,只要手机能获得root权限,安装和激活xposed框架是非常简便的,但随着系统版本的持续更新, ...
- MyBatis学习---整合SpringMVC
[目录]
- Android 视频通信,低延时解决方案
背景: 由于,项目需要,需要进行视频通信,把a的画面,转给b. 运维部署: APP1:编码摄像头采集的数据,并且发送数据到服务端 APP2:从服务端,拉取数据,并且进行解码显示 服务端:接收APP1提 ...
- Jmeter接口测试实战-数据传递
Jmeter接口测试实战-数据传递 接口与接口之间没有关联的测试是缺乏意义和没有灵魂的,只有数据在不同接口之间传递才能勾画出业务场景重要的链路. 我们用较为通用的http/https协议,接口普遍返回 ...
- C#零基础入门-1-安装IDE
安装VS2017 下载安装,选择C#开发语言,过程略. 也可以使用VS2015
- MySQL系统变量sql_safe_updates总结
MySQL系统变量sql_safe_updates总结 在MySQL中,系统变量sql_safe_updates是个非常有意思的系统变量,在Oracle和SQL Server中都没有见过这样的参数 ...