首页 > 数据库 >oracle中将一行字符串拆分成多行

oracle中将一行字符串拆分成多行

时间:2024-12-30 09:21:57浏览次数:6  
标签:多行 tesk PRIOR bk 字符串 oracle 查询 id

--创建测试数据

create table bk_tesk(id varchar2(10),s varchar2(20));

insert into bk_tesk values ('A','1,2,3');
insert into bk_tesk values ('B','4,5,6');
insert into bk_tesk values ('C','7,8');

 

--查询语句

select * from   bk_tesk;

 

我们需要将字段S中以逗号分隔的数据拆分成多行。结果如图所示

 

 

实现将一行数据拆分成多行的代码如下所示

 

select id, trim(regexp_substr(s, '[^,]+', 1, level)) as s
from bk_tesk
connect by prior sys_guid() is not null
and level <= regexp_count(s, ',') + 1
and prior id = id
order by id, s;

 

1: PRIOR id = id这个条件的主要作用是确保层次查询在处理每个id 时保持连续性

  • PRIOR 关键字用于引用上一行的值。
  • 这个条件使得每次迭代都使用相同的 id 值。
  • 它防止查询跨越不同的 id 值,确保每个 id 的所有拆分值都被正确处理。
  • 例如,当处理 'a' 的值时,这个条件确保不会跳到 'b' 的值,直到 'a' 的所有值都被处理完。
  • id字段必须是唯一值,不然查询结果会出现重复值。如果id不是唯一,可以使用rowid(PRIOR rowid = rowid)

2: PRIOR SYS_GUID() IS NOT NULL。这个条件的主要目的是为了创建一个始终为真的条件。允许 CONNECT BY 继续执行,

直到其他条件(如 LEVEL 条件)停止查询

     

 

标签:多行,tesk,PRIOR,bk,字符串,oracle,查询,id
From: https://www.cnblogs.com/ivenlin/p/18640056

相关文章

  • 攻克LeetCode 1055:探寻形成字符串的最短路径
    一、题目引入在LeetCode的题库中,1055.形成字符串的最短路径这道题饶有趣味且充满挑战。简单来说,对于给定的源字符串source和目标字符串target,我们要找出源字符串中能通过串联形成目标字符串的子序列的最小数量。如果无法通过串联源字符串中的子序列来构造目标字符串,那就得......
  • Oracle数据库中FIRST_VALUE、LAST_VALUE、LAG和LEAD是用于在窗口函数中进行数据行之间
    在Oracle数据库中,FIRST_VALUE、LAST_VALUE、LAG和LEAD是用于在窗口函数中进行数据行之间相对位置访问的函数。下面分别介绍这些函数的作用和用法。1.FIRST_VALUEFIRST_VALUE函数返回在指定窗口帧内的第一行的值。常用于在分组或排序的上下文中获取某一组的起始值。......
  • JSON字符串反序列化 动态泛型
    需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成JSON字符串,然后JSON反序列化成对象,然后反射调用目标方法时这样的:CommandRespsendXXX(BaseCommandApiDTO<XXX>baseCommandApiDTO);方式一:FastJsonClassmainBody=Class.forName(entity.ge......
  • 数组与字符串 - 一维数组、二维数组、字符串处理
    引言数组和字符串是编程中非常常见的数据结构,用于存储和操作一组相同类型的数据。C++提供了丰富的语法和库函数来处理数组和字符串,使得这些操作既简单又高效。本文将详细介绍C++中一维数组、二维数组和字符串的使用方法,并通过示例帮助读者更好地理解。1.一维数组一维数......
  • 字符串逆序
    way1:循环版#include<stdio.h>#include<string.h>intmain(){   chararr[]="abcdef";   intleft,right,t;   left=0;   right=strlen(arr)-1;   while(left<right)   {      t=arr[left];      arr[left]=arr[right]; ......
  • Emacs折腾日记(六)——elisp字符与字符串类型
    本文相关的知识点主要来自elisp简明教程后续内容可以直接查看这个教程上一节我们了解了elisp中基础数据类型之一的数字类型,相比于C/C++来说elisp的数字类型更少,学习起来可能也更加简单。那么这篇我们来学习另一个数据类型——字符串字符串的基本介绍回忆以下在C/C++中学......
  • Python 标准库:string——字符串操作
    文章目录模块介绍主要常量主要类-Formatter-Template主要函数-capwords()-Template.substitute()-Formatter.format()模块介绍string模块提供了许多与字符串操作相关的常量和函数。它主要用于处理字符串,包括字符集合、格式化操作和其他与字符串相关的功能。......
  • [20241227]字符串转换成列表问题.txt
    [20241227]字符串转换成列表问题.txt--//开发经常会写sql语句,经常会出现in('111122','1111113'..,'2222111')之类的情况,一般语句in里面内容经常变化,导致无法使--//用绑定变量。--//实际上以前例子,通过建立type,然后建立函数将拼接的字符串转换为数字或者字符串列表。--//前几天有......
  • 2024/12/17 【字符串】LeetCode 459.重复的子字符串 【❌】
    https://programmercarl.com/0459.%E9%87%8D%E5%A4%8D%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.html#%E6%80%9D%E8%B7%AFhttps://leetcode.cn/problems/repeated-substring-pattern/子串结束位置大于中间位置的话,一定不能重复组成字符串。如果next[len-1]!=-1,则说......
  • leetcode 2466. 统计构造好字符串的方案数
    2466.统计构造好字符串的方案数没写出来......