oracle下字段拆分,字段合并的一种方式

2023-10-29

在数据库处理中,我遇到了设计很让人蛋疼的表。

此表处理一对多关系的方式是:将一个主键对应的多个值用逗号分割,然后存放在一个字段中。

于是,我在表中遇到了类似这样的数据:

表A:

id  val
1 kate,jam,lucy,tracy
2 jim,lily,tom
3 tim
 

现在,我要将val字段的值进行拆分处理,一般的方法是函数或存储过程,这里给出一个SQL语句的处理方式。

语句如下:

 with temp0 as (select LEVEL lv from dual CONNECT BY LEVEL <= 100)
      select id,substr(t.vals,instr(t.vals, ',', 1, tv.lv) + 1,
                         instr(t.vals, ',', 1, tv.lv + 1) -(
                         instr(t.vals, ',', 1, tv.lv) + 1)
                  ) AS val
      from (select id,',' || val || ',' AS vals,
                 length(val || ',') - nvl(length(REPLACE(val, ',')), 0) AS cnt
            from a) t join temp0 tv
                      on  tv.lv <= t.cnt

with 貌似需要oracle 10g以上版本支持,这里temp0类似一个临时表,这样会使语句的执行效率更高。100表示这个语句能处理的多信息字段最多包含99个逗号。

是多少,看具体业务。temp0b表的作用类似于一个游标。

执行结果如下:

1 kate
2 jim
3 tim
1 jam
2 lily
1 lucy
2 tom
1 tracy

(小吐槽下:csdn的这个博客编辑器真垃圾,插个图片要人命)


然而有些情况,我们还需将上述一对多的信息用 包含逗号的方式展现,这时靠一个SQL语句怎么弄呢?

语句如下:

 select id,wm_concat(val) as vals
 from b
 group by id
函数vm_concant()貌似也是高版本才支持的。表b中的东西类似于上面拆分的结果集。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle下字段拆分,字段合并的一种方式 的相关文章

  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • 查找 PostgreSQL 中所有范围集合的所有交集

    我正在寻找一种有效的方法来查找时间戳范围集之间的所有交集 它需要与 PostgreSQL 9 2 配合使用 假设这些范围代表一个人可以见面的时间 每个人都可以有一个或多个空闲时间范围 我想找到all可以召开会议的时间段 即所有人都有空的时间
  • 当sql连接中存在两个同名列时,如何从一个表列中获取值

    当我连接两个具有相同名称列的表时 我目前面临着尝试获取值的问题 例如 table1 date和table2 date 每个表中的日期不同 我将如何获取 日期 本例中的表1 我目前正在跑步 while row mysqliquery gt f
  • 将 UUID 存储为 base64 字符串

    我一直在尝试使用 UUID 作为数据库键 我希望占用尽可能少的字节数 同时仍然保持 UUID 表示形式的可读性 我认为我已经使用 base64 将其减少到 22 个字节 并删除了一些尾随的 这些 对于我的目的来说似乎没有必要存储 这种方法有
  • 分层查询

    我希望我能够解释困扰我的问题 我有以下分层数据集 这只是 34K 记录的子集 PARENT ID CHILD ID EXAM TUDA12802 TUDA12982 N TUDA12982 TUDA12984 J TUDA12984 TUD
  • REgex从oracle中的字符串中获取数字

    我有以下格式的字符串 阿克拉姆 88 jamesstree 20140418 阿克兰 8 约翰街 20140418 阿克兰 888 johnstreet 20140418 现在我只想检索 88 8 和 888 值 我为此编写了以下查询 SU
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 使用 JSON 参数的 Postgres 批量 INSERT 函数

    这是一个plpgsqlpostgres 的函数9 6 它试图INSERT一行 如果插入没有失败 由于违反键约束 那么它会运行更多命令 CREATE FUNCTION foo int text text RETURNS void AS BEG
  • Oracle - 使用 DBMS_MVIEW.REFRESH 刷新“REFRESH FORCE ON DEMAND”视图时会发生什么

    我有以下物化视图 CREATE MATERIALIZED VIEW TESTRESULT ON PREBUILT TABLE WITH REDUCED PRECISION REFRESH FORCE ON DEMAND WITH PRIMA
  • 在sqlite SQL语句中与order by子句结合使用limit

    下面的两条 SQL 语句总是会产生相同的结果集吗 1 SELECT FROM MyTable where Status 0 order by StartTime asc limit 10 2 SELECT FROM SELECT FROM
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • Pivotal Cloud Foundry - 连接到外部 Oracle 数据库

    我正在创建一个 Spring boot 应用程序 该应用程序连接到一个不由 PCF 管理 或驻留在外部 的 Oracle 数据库 在我的本地开发环境中 我在 application properties 文件中配置了数据库连接详细信息 有人
  • 通过 Oracle 的数据库链接运行 SQL Server 存储过程

    参考如何通过数据库链接执行 Oracle 存储过程 https stackoverflow com questions 240788 how to execute an oracle stored procedure via a datab
  • APEX 安装失败,PLS-00201:必须声明标识符“SYS.DBMS_DB_VERSION”

    尝试在 Oracle XE 18c 数据库上安装 Oracle APEX 20 2 如下官方说明 https docs oracle com en database oracle application express 20 1 htmig
  • ActiveRecord:向包含的 ON 子句添加条件

    我有一个模型报价和另一个历史报价 一个报价有很多历史报价 现在 我想立即加载一组报价的某一天的历史报价 如果存在 为此 我认为我需要将这一天传递给 ON 子句 而不是 WHERE 子句 以便我获得所有报价 即使在给定日期没有历史报价时也是如
  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • Oracle查询结果分页无TABLE FULL SCAN数据访问方式

    stackoverflow 上有很多关于如何正确执行分页的问题 对于 Oracle 来说 最流行的答案是这样的 select from select row rownum rownum from select from some table
  • 跨多个表进行搜索,并在结果行中显示表名称

    如何构建 SQL 语句以跨多个平面不相关的表运行 并使用选择结果和结果来自的表的名称显示结果 这种情况是这样的 我有几个表 每个表都有相同的列名 这是我从外部各方收到的数据 并将其存储在不同的表中 相同的表看起来像 Table 1 pid
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation

随机推荐

  • LaTeX 中插入图片使其紧跟插入的文字之后

    LaTeX 中插入图片使其不跑到每页的开头而紧跟插入的文字之后 此次建模过程中 遇到的一个比较棘手的问题是 当插入图片时 图片的位置总是会自动跑到当页 或下一页 的最上方 而不是紧跟在其对应的说明文字之后 这是我们想要的效果 解决方法如下
  • 云服务器被DDOS攻击该如何防御?

    相信很多大型网站遭遇到DDoS攻击 导致网站无法访问而又难以解决 包括小编的个人博客也曾接受过DDOS的 洗礼 对此感同身受 所以 本文我们一起来了解下DDOS攻击并分享一些在一定程度范围内的应对方案 关于DDOS攻击 分布式拒绝服务 DD
  • MOS管的原理及其米勒效应(学习笔记)

    一 MOS管的组成及其原理 在讲解MOS的组成之前我们先来了解一下N型半导体和P型半导体 N型半导体是在纯净的硅晶体中掺入了5价磷 此时磷原子最外层多出来了一个自由电子 因为自由电子带负电 所以我们称为N型半导体 N取自于Negative
  • Go语言中json.Marshal()一直返回[123 125]的解决方法

    Go语言中对结构体进行json Marshal 一直返回 123 125 即 原因是go中是否可导出是根据名字首字母是否大写来确定的 如果结构体某字段的首字母为小写则不可导出 例子如下 注意Student内字段首字母的大小写 不可导出 ty
  • Caffe学习3——Forward and Backward

    Forward和Backward是Net中的计算本质 让我们考虑最简单的逻辑回归分类器 前向传播的部分是根据input来计算output 从而进行inference 在前向中 Caffe通过模型中每个layer的计算组合来计算 functi
  • 如何查看 Linux 系统安装的时间

    我们 SUN 实验室每台服务器上架后都需要填写一个表格 这个表格包括详细的机器硬件配置 操作系统版本和安装时间 网络配置 机器名 MAC 地址和 IP 安装的软件和用途 安全级别和策略 联系人 上架时间 机柜号等 昨天有位管理员忘了填写操作
  • Vue中常见设计模式的应用~

    Vue是基于什么模式 表示既然是Vue中常见的设计模式 首当其冲就先聊聊MVVM模式啦 一 mvvm模式 Vue js 是一个基于 MVVM 设计模式的前端框架 它将前端中的 UI视图 与 底层数据 和 业务逻辑 分离开来 使得UI视图与数
  • 并查集-- 一种路径压缩实现

    并查集用于计算图连通分量 比如回答这样的问题 社交媒体中 用户A和用户B是否属于同一个圈子里的 一个城市到另一个城市是否是可达的 并查集适用于并不需要计算出图上具体的路径 只需要计算是否连通 public interface UnionFi
  • epub.js使用

    div div 1 引入图书路径 需是epub类型 method需为default 要么苹果端加载为空白 var book ePub epub 三国演义 epub openAs epub var rendition book renderT
  • 【Photon Voice】如何获取App ID

    步骤1 注册并登录Photon 已经有账户了 您可以直接进行步骤2 注册一个光子账户 第2步 获取应用程序ID App ID是为Photon Cloud应用程序生成的标识符 当应用程序客户端连接用户或断开其他应用程序的用户时 将使用到它 进
  • GB/T28181-2022协议版本标识X-GB-Ver解读

    GB28181 2022相对2016 其中有个变化是 报文中携带协议版本标识 X GB Ver 3 0 3 0 2022 2 0 2016 为便于联网设备或服务器之间互相识别对方支持的协议版本 在SIP注册及其响应消息 无论是成功或失败 头
  • 客观面试题--36.Mybatis$与#取值的区别

    1 是将传入的值当做字符串的形式 eg select id name age from student where id id 当前端把id值1 传入到后台的时候 就相当于 select id name age from student w
  • shell脚本中 if 、for 命令使用方法

    1 if 语句的使用 if语句的语法 if f file then如果有else 为 if then elif then else fi eg 判断某一个文件是否存在 file test 1 hello txt if f test 1 he
  • gigapixel ai 5.1汉化版 附使用教程

    gigapixel ai是一款运用了AI人工智能技术的图片 无损 放大软件 采用了AI深度学习技术 通过它 你可以放大图像并填补其他调整大小的产品遗漏的细节 让低分辨率图片专为高分辨率 高质量图片 而且该软件在功能上与PhotoZoom软件
  • 小程序实现canvas绘制图片和文字并保存到手机

    HTML
  • 如何在OpenCV Python中从立体图像创建深度图?

    翻译 Shahid Akhtar Khan的 How to create a depth map from stereo images in OpenCV Python 可以使用立体 stereo 图像创建深度图 为了从立体图像构建深度图
  • 在弄清什么是真正的OKR之前,别轻易使用

    转自 https www sohu com a 167148654 114819 KR到底是什么 在使用OKR的时候也有哪些注意点 在没弄清楚这些事情 可不要轻易使用 OKR大概在2013年传入中国 开始主要是一些有硅谷背景的初创企业在推行
  • RuntimeError: DataLoader worker (pid(s) 17016, 18312) exited unexpectedly

    RuntimeError DataLoader worker pid s 17016 18312 exited unexpectedly 这个错误通常是由于DataLoader中的一个或多个worker进程crash引起的 原因可能是许多不
  • Android源码编译之 lunch命令分析及user和userdebug编译选项区别

    不同厂商在编译Android系统时 会选择不同产品和编译版本 在Android编译过程中 通过source lunch来选择 1 souuce build envsetup sh 加载命令 2 lunch 选择平台等编译选项 3 make
  • oracle下字段拆分,字段合并的一种方式

    在数据库处理中 我遇到了设计很让人蛋疼的表 此表处理一对多关系的方式是 将一个主键对应的多个值用逗号分割 然后存放在一个字段中 于是 我在表中遇到了类似这样的数据 表A id val 1 kate jam lucy tracy 2 jim