连号的现在已经解决了,1234或4321这种递增或递减的搞不出来了,(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){5}),这个在oracle中跑没有结果,哪位兄弟对正则表达式比较了解的,指点一下吧

解决方案 »

  1.   

    REGEXP_LIKE(DEVICE_NUMBER,
    '(0{5}$)|(1{5}$)|(2{5}$)|(3{5}$)|(4{5}$)|(5{5}$)|(6{5}$)|(7{5}$)|(8{5}$)|(9{5}$)')
    这个是匹配5连号的,比如手机号后几位是11111,22222,33333等,现在要匹配1234或2345或3456等,正则表达式该怎么写?还有这种1212或2323之类的又该怎么写?
      

  2.   


    -------如果你查询出来的结果只有一行为连号,如果有多行非连号
    SQL> 
    SQL> select rn
      2    from (select rs, rs - row_number() over(order by 1) rn
      3            from (select regexp_substr('12345', '\d', 1, rownum) rs
      4                    from dual
      5                  connect by rownum <= length('12345')))
      6   group by rn
      7  ;        RN
    ----------
             0SQL> 
    SQL> select rn
      2    from (select rs, rs - row_number() over(order by 1) rn
      3            from (select regexp_substr('15268', '\d', 1, rownum) rs
      4                    from dual
      5                  connect by rownum <= length('15268')))
      6   group by rn
      7  ;        RN
    ----------
             2
             3
            -1
             0SQL> 
      

  3.   

    那我请问gelyon有什么好办法呢?难道使用for循环入表,然后再分析数据吗???
      

  4.   

    (SUBSTR(DEVICE_NUMBER, 7, 1) =
                                SUBSTR(DEVICE_NUMBER, 8, 1) - 1 AND
                                SUBSTR(DEVICE_NUMBER, 8, 1) =
                                SUBSTR(DEVICE_NUMBER, 9, 1) - 1 AND
                                SUBSTR(DEVICE_NUMBER, 9, 1) =
                                SUBSTR(DEVICE_NUMBER, 10, 1) - 1 AND
                                SUBSTR(DEVICE_NUMBER, 10, 1) =
                                SUBSTR(DEVICE_NUMBER, 11, 1) - 1) --ABCDE
    OR (SUBSTR(DEVICE_NUMBER, 7, 1) =
                                SUBSTR(DEVICE_NUMBER, 8, 1) + 1 AND
                                SUBSTR(DEVICE_NUMBER, 8, 1) =
                                SUBSTR(DEVICE_NUMBER, 9, 1) + 1 AND
                                SUBSTR(DEVICE_NUMBER, 9, 1) =
                                SUBSTR(DEVICE_NUMBER, 10, 1) + 1 AND
                                SUBSTR(DEVICE_NUMBER, 10, 1) =
                                SUBSTR(DEVICE_NUMBER, 11, 1) + 1) --EDCBA
    递增或递减现在我用这个方法写了个,主要是想了解一下正则表达式写的话怎么写
      

  5.   

    (?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){5}|(?:9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){5})
    java里可以这样写,这个更简洁,而且可以写成通用的,oracle应该也有类似的吧
      

  6.   

    正则表达式里,好像没有支持这种计算。
    倒是可以帮着优化一下 连号的代码
      
       where regexp_like( 4位号码 ,'^([[:digit:]])\1{3}$')
      

  7.   

    楼主的要求很折腾人,想不出更好的办法了。 另外,非常担心查询效率。
    where regexp_like(rn,'^([[:digit:]])\1{3}$')   -- 4位 连号
                   or rn = substr(rn,1,1)
                             ||substr(rn,1,1)+1
                             ||substr(rn,1,1)+2
                             ||substr(rn,1,1)+3  -- 4位 连续 升序 1234
                       or rn = substr(rn,1,1)
                             ||substr(rn,1,1)-1
                             ||substr(rn,1,1)-2
                             ||substr(rn,1,1)-3  -- 4位 连续 降序 4321