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字符串行拆分成列的三种方式的更多相关文章

  1. 字符串转换成JSON的三种方式

    采用Ajax的项目开发过程中,经常需要将JSON格式的字符串返回到前端,前端解析成JS对象(JSON ).ECMA-262(E3) 中没有将JSON概念写到标准中,但在 ECMA-262(E5) 中J ...

  2. python:字符串转换成字节的三种方式

    str='zifuchuang' 第一种 b'zifuchuang'第二种bytes('zifuchuang',encoding='utf-8')第三种('zifuchuang').encode('u ...

  3. python:字符串转换成字节的三种方式及字符转码问题

    str='zifuchuang' 第一种 b'zifuchuang'第二种bytes('zifuchuang',encoding='utf-8')第三种('zifuchuang').encode('u ...

  4. js将字符串转换成json的三种方式

    1,js自带的eval函数,其中需要添加小括号eval('('+str+')'); function strToJson(str){ var json = eval('(' + str + ')'); ...

  5. js中将字符串转换成json的三种方式

    1,eval方式解析,恐怕这是最早的解析方式了.如下: function strToJson(str){ var json = eval('(' + str + ')'); return json; ...

  6. Oracle 行转列总结 Case When,Decode,PIVOT 三种方式 - 转

    最近又碰到行专列问题了,当时不假思索用的是子查询,做完后我询问面试管行专列标正的写法应该如何写,他告诉我说应该用"Decode",索性我就总结一下,一共三种方式 --======= ...

  7. oracle 多行转多列查询

     oracle 多行转多列查询  ---create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);inse ...

  8. Oracle 多行转多列

    Oracle 多行转多列,列值转为列名   前段时间做调查问卷,客户创建自定义问卷内容,包括题目和选项内容; 之后需要到处问卷明细,,,,麻烦来咯 于是到网上到处搜索,没有直接结果;于是又找各种相似的 ...

  9. JavaScript进阶(四)js字符串转换成数字的三种方法

    js字符串转换成数字的三种方法 在js读取文本框或者其它表单数据的时候获得的值是字符串类型的,例如两个文本框a和b,如果获得a的value值为11,b的value值为9 ,那么a.value要小于b. ...

随机推荐

  1. Tkinter小技巧:如何为窗口右上角的‘x’添加一个自定义的响应函数

    不废话,直接上代码 import tkinter as tk from tkinter import messagebox main_window = tk.Tk() main_window.geom ...

  2. h5页面 video暂停播放 视频控件 以及当前页面只有一个可以播放效果

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  3. HTML文档命名规则

    HTML文档是展示Web前段开发工程师成果的最好表示方式,为了便于文档规范化管理,在编写HTML文档时,必须遵循HTML文件命名规则. HTML文档命名规则如下: (1)文档的扩展名为htm或者htm ...

  4. Web前端2019面试总结

    基础知识点   1.水平垂直居中 子绝父相,子盒子设置绝对定位,设置top:50%;left:50%,margin-top:-50%;margin-left:-50%; 子绝父相,子盒子设置绝对定位, ...

  5. Windows有点腻了?不如试试Ubuntu.

    最近在接触Python. 因为担心环境会向Java一样,很容易影响当前的工作电脑. 所以准备搭建一台虚拟机,不过Windows的尺寸是在太大了.所以,选择安装Ubuntu. Ubuntu官方网站地址: ...

  6. Android为TV端助力:自定义view之太阳

    先看效果图 package com.hhzt.iptv.lvb_w8.view; import android.content.Context;import android.graphics.Canv ...

  7. 测者的测试技术手册:Java中的null类型是测试不可超越的鸿沟

    null是一个非常非常特殊的类型,对于每一个测试人员都要十分小心null的存在的可能性.同时null也让很多RD头疼,甚至连Java的设计者都成人null是一个设计失误.这篇文章,测者想聊聊这个让很多 ...

  8. mysql的使用相关问题

    MySQL的使用和密码忘记解决 解决步骤: 1.查看:我的电脑--管理--服务--查看mysql路径---一直到mysql下的bin文件夹     或需转回别的磁盘: G: (C:\Users\Adm ...

  9. SQL Server使用sys.master_files计算tempdb大小不正确

    一直习惯使用sys.master_files来统计数据库的大小以及使用情况,但是发现sys.master_files不能准确统计tempdb的数据库大小信息.如下所示: SELECT       da ...

  10. Hybrid App—Hybrid App开发模式介绍和各种开发模式对比

    什么是Hybrid App 最开的App开发只有原生开发这个概念,但自从H5广泛流行后,一种效率更高的开发模式Hybrid应运而生,它就是"Hybrid模式".Hybrid APP ...