oracle值sql记录

前言

由于本人sql比较薄弱 将一些常用又使用的sql语句记录与大家分享
一:替换特殊字符分割的字符串

需求如下:

有张原始表tschedule 和新表bjcodechange ,需要将原始表的compeny_code字段和bjcodechange 的oldwindcode 进行关联替换成bjcodechange表的newwindcode字段

无特殊字符的查询很简单 如下

sql 复制代码
UPDATE tschedule  ts
   SET ts.security_code =
       (SELECT bj.newwindcode
          FROM BJcodechange bj
         WHERE ts.security_code = bj.oldwindcode
           )
 WHERE EXISTS (SELECT 1
          FROM BJcodechange bj
         WHERE ts.security_code = bj.oldwindcode);

但是有特殊字符的数据如下 注意测试原始表的compeny_code字段的内容许如下所示

tschedule:

name compeny_code
张三 000001
李四 800981,000001,000002

bjcodechange:

oldwindcode newwindcode
800981 888888

最终的效果如下

name compeny_code
张三 000001
李四 888888 ,000001,000002

完整步骤

步骤1:拆分后的中间数据 (split_data)

rid elem ord
OKABKyAAA2AAAAiTAAD 000001 1
OKABKyAAA2AAAAiTAAD 800981 2
OKABKyAAA2AAAAiTAAD 000001 3
AABKyAAA2AAAAiTAAD 000002 1
步骤2:关联后的中间数据
rid elem newwindcode
---------------------- -------- -------------
OKABKyAAA2AAAAiTAAD 430017 920017
OKABKyAAA2AAAAiTAAD 000001 (null)
OKABKyAAA2AAAAiTAAD 430017 920017
AABKyAAA2AAAAiTAAD 000001 (null)
步骤3:聚合后的结果 (merged)
rid new_code
---------------------- ---------------------
OKABKyAAA2AAAAiTAAD 920017,000001,920017
AABKyAAA2AAAAiTAAD 000001
sql 复制代码
MERGE INTO tschedule a
USING (
  WITH split_data AS (
    SELECT 
      a.rowid AS rid, 
      regexp_substr(a.compeny_code, '[^,]+', 1, LEVEL) AS elem,
      LEVEL AS ord
    FROM tschedule a
    CONNECT BY 
      LEVEL <= regexp_count(a.compeny_code, ',') + 1
      AND PRIOR a.rowid = a.rowid
      AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
  )
  SELECT 
    rid,
    LISTAGG(NVL(b.newwindcode, elem), ',') WITHIN GROUP (ORDER BY ord) AS new_code 
  FROM split_data sd
  LEFT JOIN bjcodechange b ON sd.elem = b.oldwindcode  
  GROUP BY rid
) merged
ON (a.rowid = merged.rid)
WHEN MATCHED THEN
  UPDATE SET a.compeny_code = merged.new_code
WHERE a.compeny_code != merged.new_code;

好了 至此 oracle值sql记录 点点关注不迷路 老铁们!!!!!

相关推荐
袋鼠云数栈4 分钟前
实时湖仓如何真正做到“数据够新”?
大数据·数据库·人工智能·数据治理
ACP广源盛1392462567321 分钟前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256731 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
倔强的石头_3 小时前
事务边界与批量写入:避免长事务、锁等待和日志压力
数据库
努力努力再努力wz3 小时前
【Redis入门系列】从 KEYS 到 SCAN:渐进式遍历、Cursor 与位反转原理
数据库·redis·缓存
坐吃山猪3 小时前
【多线程】Lock与Condition
大数据·数据库
Lightpwd4 小时前
Spring Boot 多数据源落地:AbstractRoutingDataSource + 注解切面(附源码)
数据库·后端
LabVIEW开发4 小时前
LabVIEW 64位安装的位深陷阱:工具包、内存与工程兼容
数据库·labview·labview知识·labview功能·labview程序
寺中人4 小时前
MySQL 8.0 Windows 完整安装教程:环境配置、密码重置与常见报错排查
数据库·windows·mysql·环境搭建·mysql 安装
这个DBA有点耶4 小时前
同样48核配置TPS差1倍?高性价比数据库一体机的“软硬协同”才是分水岭
服务器·数据库·架构