zoukankan      html  css  js  c++  java
  • Oracle中根据特定的分隔符拆分字段

    记录一下在Oracle数据库中碰到的问题。

    一、问题

    该问题的需求是查询最新时间段的一条数据并取出某一个栏位的值

    其中SEG07栏位的数据是用特殊符号  ^ 来区分。

    二、解决方案

    1、由于要选出最新的一条数据,将SEG07栏位中的数据进行降序排列

    2、将降序排列后的第一条数据显示(表数据太大,防止后续CONNECT BY循环时间过长,而且一条以上使用CONNECT BY就会卡死,不知道什么原因)

    3、将SEG07中的数据通过正则表达式筛选出来,并将分理出的数据循环排列,形成虚拟表

    三、方法实现

    使用REGEXP_SUBSTP方法

    REGEXP_SUBSTR函数格式如下:

    function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

    __srcstr     :需要进行正则处理的字符串

    __pattern    :进行匹配的正则表达式

    __position   :起始位置,从第几个字符开始正则表达式匹配(默认为1)

    __occurrence :标识第几个匹配组,默认为1

    __modifier   :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)

    CONNECT BY的一些用法可以查看这篇文章 https://blog.csdn.net/zwjzqqb/article/details/79066224

    具体语法如下:

    SELECT ID,CREATE_TIME,REGEXP_SUBSTR(SEG07,'[^^]+',1,LEVEL)SEG07 
    FROM (
    SELECT ID,CREATE_TIME,SEG07,SEG08  
    from(
    SELECT ID,CREATE_TIME,SEG07,SEG08 
    FROM TableName 
    WHERE SEG08= :VALUE
    ORDER BY CREATE_TIME_MS DESC)
    WHERE ROWNUM = 1)
    CONNECT BY LEVEL <= LENGTH (SEG07) - LENGTH (REPLACE (SEG07, '^','')) + 1;

    其中LENGTH (SEG07) - LENGTH (REPLACE (SEG07, '^','')) + 1是用来判断SEG07中字符串的个数的

    LENGTH (SEG07)是SEG07字符串的总长度,如:1^2^3的总长度就是5

    LENGTH (REPLACE (SEG07, '^',''))是通过REPLACE方法将SEG07中的分隔符去掉,如:1^2^3转换后=>123,这样长度就是3

    然后LENGTH (SEG07) - LENGTH (REPLACE (SEG07, '^','')) ,如:上述例子LENGTH (1^2^3) - LENGTH (REPLACE (1^2^3, '^','')) = 2,而其中的字符串为3,所以需要加一

    其实这个就相当于去数字符串中的分隔符然后加一

    REGEXP_SUBSTR(SEG07,'[^^]+',1,LEVEL)中的'[^^]+部分是正则表达式,其中[^^]+红色的部分是字符串的分隔符,可以为[^,]+,[^-]+等等

  • 相关阅读:
    无线网络安全标准是什么?漏洞是怎样产生的
    揭秘英特尔处理器如何启动?
    数据包级网络遥测和网络安全推送分析
    自动化与网络工程之间的关系
    ElementUI中的el-table中实现动态添加一行、删除一行、清空所有行
    ElementUI中的el-table实现多选框不勾选的提示
    Nodejs中的fs模块的使用
    ElementUI中的el-table怎样实现多选与单选
    MyBatis中针对if-test的参数为指定值的xml写法
    SqlServer中怎样从Excel中导入数据
  • 原文地址:https://www.cnblogs.com/MoonASixpence/p/13729893.html
Copyright © 2011-2022 走看看