查询字符串中连续出现的字符

简介: 根据用户需求需要查询字符串中连续出现的字符 如'mn,asdfs,opq,dfasf,abc,asdlfj,defg' 'DF,RST',要求找出两个字符串中连续出现的字符 这里两个字符串数据相当于表中的两行数据,具体数据用sql构造。

根据用户需求需要查询字符串中连续出现的字符

'mn,asdfs,opq,dfasf,abc,asdlfj,defg' 'DF,RST',要求找出两个字符串中连续出现的字符

这里两个字符串数据相当于表中的两行数据,具体数据用sql构造。对于这种需求的sql主要涉及两块,一个是如何找出字符串中被,号

分割的字符。一个是如何判断字符是连续的字符。

1 找出字符串中所有被,号分割出的字符




SELECT regexp_substr(teststr,'[^,]+',1,level) teststr

          FROM (

                SELECT 'mn,asdfs,opq,dfasf,abc,asdlfj,defg' teststr

                      ,1 id1

                FROM dual

                UNION ALL

                SELECT 'DF,RST' teststr

                      ,2 id1

                FROM DUAL) t

          connect by level <20 

          AND PRIOR id1 = id1

          AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL;









这里第一行数据和第二行数据明显产生递归关系,因此需要PRIOR id1 = id1 来过滤不必要的递归步骤



2 而查询字符是否连续的,可以用如下sql查询出所有字符的组合




select ss

           from (select replace(sys_connect_by_path(c, ','), ',') ss

                   from (select rownum i, chr(65 + rownum - 1) c

                           from dual

                         connect by rownum <= 26)

                 connect by prior i = i - 1)

          where length(ss) >= 2;


3 最后用分割出的每个字符单元和连续字符的组合判断,查询出所有属于连续字符的数据即所要结果


select teststr,
 
        regexp_substr(upper(teststr), '[A-Z]{2,10}') reqstr

   from ( SELECT regexp_substr(teststr,'[^,]+',1,level) teststr
          FROM (
                SELECT 'mn,asdfs,opq,dfasf,abc,asdlfj,defg' teststr
                      ,1 id1
                FROM dual
                UNION ALL
                SELECT 'DF,RST' teststr
                      ,2 id1
                FROM DUAL) t
          connect by level <20 
          AND PRIOR id1 = id1
          AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
         )   
  
  where regexp_substr(upper(teststr), '[A-Z]{2,10}') in

        (select ss

           from (select replace(sys_connect_by_path(c, ','), ',') ss

                   from (select rownum i, chr(65 + rownum - 1) c

                           from dual

                         connect by rownum <= 26)

                 connect by prior i = i - 1)

          where length(ss) >= 2);

目录
相关文章
|
8天前
|
索引 容器
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
|
14天前
|
算法 测试技术 C#
【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
【前缀和】3085. 成为 K 特殊字符串需要删除的最少字符数
|
10月前
|
Python
统计字符串中不同字符个数问题
统计字符串中不同字符个数问题
72 0
C/C++编程题之删除字符串中出现次数最少的字符
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
|
测试技术
字符串中有多少个不重复的字符并按由前到后的顺序输出一个新的字符串和该字符串长度的整数
字符串中有多少个不重复的字符并按由前到后的顺序输出一个新的字符串和该字符串长度的整数
56 0
|
算法 前端开发 测试技术
【前端算法】字符串中连续最多的字符以及次数
双指针与双层循环“跳步”的比较
|
人工智能 BI
762 字符串匹配----给定两个长度相同的字符串 a 和字符串 b。如果在某个位置 i 上,满足字符串 a 上的字符 a[i] 和字符串 b 上的字符 b[i] 相同,那么这个位置上的字符就是匹配
给定两个长度相同的字符串 aa 和字符串 bb。 如果在某个位置 ii 上,满足字符串 aa 上的字符 a[i]a[i] 和字符串 bb 上的字符 b[i]b[i] 相同,那么这个位置上的字符就是匹配的。 如果两个字符串的匹配位置的数量与字符串总长度的比值大于或等于 kk,则称两个字符串是匹配的。
207 0
求字符串中最长的连续出现的字符
求字符串中最长的连续出现的字符
291 0
|
C#
C# 将字符串中的多个连续空格变成一个
C# 将字符串中的多个连续空格变成一个
329 0

热门文章

最新文章