问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何将oracle 中一条数据拆分成多条

发布网友 发布时间:2022-04-10 22:06

我来回答

3个回答

懂视网 时间:2022-04-11 02:27

本文个人拙见,若有出入,请指出——来自菜的颤抖

场景

表A中存放了集装箱的信息,一个集装箱一条记录,表B中存放了对于集装箱操作的指令,一条指令包括多个集装箱箱号,通过分号;切割(TCIU2347687;XUTR3546865),现在的需求是,对于已经在指令表B中的集装箱,在查询表A时需要过滤掉。

  • 很容易想到的是not in, 然而分号分割。
  • 其次,not like,然而[Err] ORA-01427: 单行子查询返回多个行,表示like后面只接受模糊查询的单个值。
  • 所以必须将分号分割的记录,拆分成单独的记录。
    技术图片
    变成:
    技术图片

    实现

    Oracle可使用regexp_substr函数实现,实现上面切割的sql为:

    select regexp_substr('TCIU2347687;XUTR3546865', '[^;]+', 1, level) JZXXH
    from dual connect by level <= regexp_count('TCIU2347687;XUTR3546865', ';') + 1

    其中regexp_substr各个参数的含义:

  • TCIU2347687;XUTR3546865 表示需要分割匹配的串(我这里只是做了示例,真实情况下是表的字段)。
  • [^;]+典型的正则表达式,我这里分号切割,因此确定分割规则是多个不是分号的字符,因此遇到分号便结束,完成一个串的获取。
  • 1开始位置,最左端(Oracle下标都是1开始)
  • level表示第几个匹配上的。
    为了直观点搞清楚这个函数,比如下面的语句:
  • select REGEXP_SUBSTR('aaa;bbb','[^;]+',1,1) AS STR FROM dual; 

    结果就是aaa, 如果把第二个1变成2,输出就是bbb
    好了,这部分意图很明显了,下面就是把它每一个切割串取出来,看到上面取level个,而这个level是个什么东西呢,在这个之前,先看regexp_count(string, c)函数,这个函数其实很好理解,返回string中c的个数。
    然后就是这个level,这是一个伪列,和RowNum相似,

    SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=2; 

    技术图片
    所以再回到最初的sql,也就很好理解了。

    最后

    此致,敬礼

    Oracle通过一个字段的值将一条记录拆分为多条记录

    标签:做了   结束   下标   lol   匹配   connect   需求   rom   指令   

    热心网友 时间:2022-04-10 23:35

    有拆分方式吗,可以使用表连接,将不同列的数据拆分成多条

    select 字段A 
      from 表名
     where 筛选条件
    union all
    select 字段B 
      from 表名
     where 筛选条件

    热心网友 时间:2022-04-11 00:53

    例如表名为test,数据如下
    原数据为
    col1 col2 col3 col4
    A 1 2 3
    B 1 2 3
    然后用如下语句
    select * from
    (select col1,col2 from test
    union all
    select col1,col3 from test
    union all
    select col1,col4 from test) as t
    order by col1
    得到的数据就是

    A 1
    A 2
    A 3
    B 1
    B 2
    B 3
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 房产官司律师费多少 求提纲和开题报告。英语专业! 急需一篇英语专业的论文开题报告 全国统一申通快递电话是多少 中通快递全国服务热线? 华为荣耀X6开关里的截图快捷键没了怎么设置? 电影院的英文怎么写??? 电影 和 电影院 怎么翻译 oracle中如何将一条记录拆分为多条记录 思维导图xmind 8 pro破解版怎么安装 求XMind 思维导图 免费下载 电影院用英语怎么读 特殊配方奶粉哪种好 现在市面上给婴儿吃的特殊奶粉有哪些呢? 哥我看你是真正的专家 我也想加盟室内空气检测和治理类的公司 希望您能给我介绍一下 初始资金大概需多少? 谁有Xmind(思维导图)免费版的下载链接 微信永久限制登录还能用吗? 什么特殊配方奶粉有特别的效果? xmind思维导图破解版下载 特殊奶粉有哪些牌子 做甲醛祛除加盟需要多少加盟费? 卢靖姗父亲罗伊·霍兰去世,他都参演过哪些电影呢? 演员卢靖姗父亲去世,去世的原因是什么呢? 砌墙红外线水平仪哪个牌子好 家世实力强大,怪不得韩庚能看上她!卢靖姗究竟有何强大家庭背景? 卢靖姗是几国混血吗? 红外线水平仪那个牌子好 网友:原来她是一位这样有故事的姑娘,卢靖姗身上究竟隐藏着怎样的故事? 激光红外线水平仪什么品牌好 什么品牌的红外线水平仪质量好 卢靖姗第一任丈夫 为什么说卢靖姗是五国混血? 韩庚的岳父是谁有没有人知道? 为什么严禁在井下存放用剩下的汽油,煤油和变压器油 韩庚连结婚都没爆,他真的糊了吗? 对于自然火严重的矿井,为防止自然发火,开招,开采总的要求是什么 煤矿井下掘进迎头存油有什么规定 井下支护包括哪些工作 对于自然发火严重的矿井,为防止自然发火,开拓,开采的总要求是什么? 为什么井下的润滑油,棉纱,布头和纸等要存放在铁桶内 梦到在老家的河里捉鱼,用别人的渔网捉到了不少鱼,旁边一高挑美女也捉了不少