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都是为了快速的查询层级关系的关键字,在代理关系中,或者权限关系中,经常会有层层嵌套的场景

  • 相关阅读:
    go 学习笔记---chan
    golang学习笔记---Goroutine
    golang ---Learn Concurrency
    golang ----并发 && 并行
    golang 学习笔记 使用cmd
    并发程序与并行程序
    golang学习笔记 ---interface
    golang --- map如何判断key是否存在
    golang学习 ---defer语句
    golang --for语句
  • 原文地址:https://www.cnblogs.com/1234cjq/p/11698668.html
Copyright © 2011-2022 走看看