SQL字符串的合并与拆分实例代码分析

字符串的合并

SQL字符串的合并与拆分实例代码分析

SQL字符串的合并与拆分实例代码分析

在Oracle中可能有多种实现方法,目前我已知的有两种,下面记录下这两种的实现:

字符串合并方法一:

实现SQL:

--方法一SELECT d.dept_name,wm_concat(e.emp_name) FROM employee eINNER JOIN department d ON d.dept_id=e.dept_idGROUP BY d.dept_name;

执行结果:

SQL字符串的合并与拆分实例代码分析

SQL分析:

利用Oracle自带的wm_concat()函数将字符串合并,这里有个缺点,合并的连接符号只能为默认的逗号,不能用其他符号。

字符串合并方法二:

实现SQL:

--方法二SELECT d.dept_name,LISTAGG (e.emp_name, ',') WITHIN GROUP (ORDER BY e.emp_name) namesFROM employee eINNER JOIN department d ON d.dept_id=e.dept_idGROUP BY d.dept_name;

执行结果:

SQL字符串的合并与拆分实例代码分析

SQL分析:

利用Oracle自带的LISTAGG()函数将字符串合并,它的优点在于,合并的连接符号可以指定为任意字符,并且可以很方便实现ORDER BY排序。

字符串的拆分

SQL字符串的合并与拆分实例代码分析

SQL字符串的合并与拆分实例代码分析

在Oracle中可能有多种实现方法,目前我已知的有两种,下面记录下这两种的实现:

字符串拆分方法一:

实现SQL:

--方法一WITH  t (id, name, sub, str) AS (    SELECT id, name, substr(class, 1, instr(class, '、')-1), substr(concat(class,'、'), instr(class, '、')+1)     FROM movies        UNION ALL        SELECT id, name,substr(str, 1, instr(str, '、')-1), substr(str, instr(str, '、')+1)    FROM t WHERE instr(str, '、')>0)  SELECT id, name, subFROM tORDER BY id;

执行结果:

SQL字符串的合并与拆分实例代码分析

SQL分析:

这个语句稍微有些复杂,下面分步骤进行说明:

首先看下movies表的原始数据:

SQL字符串的合并与拆分实例代码分析

1.名列前茅步是将class字段的值根据分隔符(此处为顿号)进行初步拆分,拆分为两个部分。名列前茅部分为class字段要拆分的名列前茅个值,第二部分为class字段要拆分的其余部分的值。

SQL字符串的合并与拆分实例代码分析

2.第二步利用WITH表达式实现递归查询,根据分隔符(此处为顿号)循环将名列前茅步操作中未拆分的值(第二部分)进行拆分,一直拆分到字段的最后一个分割符为止,递归结束的数据放在临时表t中。

SQL字符串的合并与拆分实例代码分析

3.第三步是一个简单的查询,从第二步的临时表t中查询记录并排序。

SQL字符串的合并与拆分实例代码分析

字符串拆分方法二:

实现SQL:

--方法二SELECT m.name,t.column_value FROM movies m,TABLE(SPLIT(m.class,'、')) t;

执行结果:

SQL字符串的合并与拆分实例代码分析

SQL分析:

这种方法其实是通过自定义一个函数(function)来处理字符串,函数split的逻辑其实跟方法一的逻辑差不多,都是用到了递归,将字符串中的值根据分隔符一次一次拆分,最终返回拆分后的字符串。这种方法个人感觉更好一些,因为是将拆分逻辑进行了封装,使用起来更简单,逻辑更清晰。

下面是split函数的创建脚本:

create or replace function split (p_list clob, p_sep varchar2 := ',')  return tabletype  pipelined is  l_idx    pls_integer;  v_list  varchar2 (32676) := to_char(p_list);begin  loop      l_idx  := instr (v_list, p_sep);       if l_idx > 0      then        pipe row (substr (v_list, 1, l_idx - 1));        v_list  := substr (v_list, l_idx + length (p_sep));      else        pipe row (v_list);        exit;      end if;  end loop;end;

函数的返回值类型tabletype也是自定义的一个类型。

下面是该类型的创建脚本:

create or replace type tabletype as table of varchar2(32676);

到此,相信大家对“SQL字符串的合并与拆分实例代码分析”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文章标题:SQL字符串的合并与拆分实例代码分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/22137

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月1日 下午11:05
下一篇 2022年9月1日

相关推荐

  • 如何进行电子钱包APP漏洞分析

    雷蛇支付(Razer Pay)在新加坡和马来西亚被广泛使用,在该篇Writeup中,作者通过APP逆向分析,利用Frida调试,发现了雷蛇支付电子钱包(Razer Pay Ewallet)中的用户签名(Signature)生成漏洞,由此可读取雷蛇支付用户的聊天记录、删除用户绑定的银行账户并窃取用户个…

    2022年9月13日
    62400
  • Apache Flink未授权访问远程代码命令执行的复现

    Apache Flink未授权访问-远程代码命令执行漏洞复现 Apache Flink Dashboard默认没有用户权限认证。攻击者可以通过未授权的Flink Dashboard控制台,直接上传木马jar包,可远程执行任意系统命令获取服务器权限,风险极大。 二、影响版本 Apache Flink …

    2022年9月10日
    1.5K00
  • IDEA如何配置Maven

    一、Maven下载&环境配置 1.下载Maven 2.解压 解压下载好的文件: 创建一个文件夹maven-repository用来充当本地仓库: 3.配置环境变量 新建一个MAVEN_HOME,添加Maven的路径: 编辑Path,新建一个环境变量%MAVEN_HOME%bin: 4.测试 …

    2022年8月30日
    97200
  • word怎么制作目录页

    word制作目录的方法: 1、首先将光标放到文档标题下方,然后选择菜单栏依次点击“引用-目录-插入目录”。 2、然后根据情况选择显示级别点击确定,级别的选择只要大于自己需需求都可以。 3、此时如果将光标放置到目录下方,选择“插入-分页”可以使目录和正文分成两页。 4、如果文章的内容发生了更改,会导致…

    2022年9月19日
    73000
  • APT框架TajMahal怎么用

    概述 ‘TajMahal’是卡巴斯基实验室在2018年秋季发现的一个以前未知且技术复杂的APT框架。这个完整的间谍框架由两个名为“东京”和“横滨”的包组成。它包括后门,加载器,协调器,C2通信器,录音机,键盘记录器,屏幕和网络摄像头抓取器,文档和加密密钥窃取程序,甚至是受害者…

    2022年9月21日
    45000
  • API的五个常见漏洞分别是什么

    API让天下没有难做的生意,黑客也是这么认为的。在企业数字化转型如火如荼的今天,API已经远远超出了技术范畴,互联网商业创新和传统企业数字化转型都离不开API经济或者API战略。API连接的不仅仅是系统和数据,还包括企业职能部门、客户和合作伙伴,甚至整个商业生态。与此同时,日益严峻的安全威胁,使得A…

    2022年9月15日
    93900
  • Redis之Jedis如何使用

    1.Jedis的介绍 Jedis = Java + Redis Redis不仅可以使用命令来操作,现在基本上主流的语言都有API支持,比如Java、C#、C++、PHP、Node.js、Go等。在官方网站里列一些Java的客户端,有Jedis、Redisson、Jredis、JDBC-Redis等其…

    2022年9月16日
    55600
  • program files可不可以删除

    “program files”不可以删除;“program files”文件夹是windows系统的程序文件夹,在系统安装完成后就已经生成,该文件夹用于存放已经安装的应用程序,位于C盘根目录,如果删除可能会导致系统运行的不稳定,导致操作系统的崩溃。 本教程操作环境:windows10系统、DELL …

    2022年9月10日
    1.2K00
  • 如何进行APT中的迂回渗透

    引言 随着信息安全行业发展,很多企业,政府以及互联网公司对网络安全越来越重视。习大大指出,没有网络安全就没有国家安全,没有信息化就没有现代化。 众所周知,现在的安全产品和设备以及对网络安全的重视,让我们用常规手段对目标渗透测试的成功率大大降低。当然,对于一些手握0day的团队或者个人来说,成功率还是…

    2022年9月21日
    56500
  • Mysql中锁的使用场景是什么

    Mysql中锁的使用场景主要有:常见锁类型、Mysql引擎介绍、常用引擎间的区别、共享锁与排他锁、排他锁的实际应用、共享锁的实际应用、死锁的发生、另一种发生死锁的情景、死锁的解决方式、意向锁和计划锁、乐观锁和悲观锁。 一、常见锁类型 表级锁,锁定整张表 页级锁,锁定一页 行级锁,锁定一行 共享锁,也…

    2022年6月29日
    70500
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部