zoukankan      html  css  js  c++  java
  • ORACLE 根据指定字符将字符串去重计数

    需求:将两个字符串汇总后根据"$$"分割成数组并去重,统计去重后的数量

    方案1:使用with as ,distinct , regexp_substr, connect by LEVEL等语句处理

    方案2: 使用游标循环数组

    上sql语句,由于需要根据两个字符去分割,算$$个数时需除以2,LEVEL需要小于$$字符的个数加1

    WITH ACCTS AS (
    SELECT DISTINCT str from (
    SELECT REGEXP_SUBSTR('1$$2$$3$$1', '[^$$]+', 1, LEVEL, 'i') AS STR FROM DUAL 
    CONNECT BY LEVEL <= ((LENGTH('1$$2$$3$$1') - LENGTH(replace('1$$2$$3$$1', '$$', '')))/2)+1))
    SELECT count(1)  FROM ACCTS;

    查询出来的str为1 2 3 ,统计数量为3

    With查询语句不是以select开始的,而是以“WITH”关键字开头
    可认为在真正进行查询之前预先构造了一个临时表,之后便可多次使用它做进一步的分析和处理

    REGEXP_SUBSTR延伸SUBSTR函数的功能,让你搜索一个正则表达式模式字符串

    connect by和level都是为了快速的查询层级关系的关键字,在代理关系中,或者权限关系中,经常会有层层嵌套的场景

  • 相关阅读:
    Java多线程:ThreadLocal
    selenium安装环境
    http常用标签
    http与https区别,get与post请求区别
    测试评审清单
    python面向对象之方法
    python正则之模式re.I re.M
    python 正则之字母匹配
    python正则之特殊表达式 .*?{}
    python正则之match search findall
  • 原文地址:https://www.cnblogs.com/1234cjq/p/11698668.html
Copyright © 2011-2022 走看看