如何在oracle列中找到连续的重复字符

时间:2014-03-31 15:55:38

标签: regex oracle

有没有办法在oracle表的varchar列中找到连续的重复字符,如1414,200200。 我们怎样才能用regexp来实现呢?

我用regexp无法实现它 我的例子我可以连续重复一个数字而不是一个模式

从双重选择regexp_substr('4120066','([[:alnum:]])\ 1',7,1,'i'); - 按预期获得输出

从双重选择regexp_substr('6360360','([[:alnum:]])\ 1',7,1,'i'); - 我也想选择这个,因为我有360后跟360

2 个答案:

答案 0 :(得分:2)

你应该能够使用这样的东西:

[...] WHERE REGEXP_LIKE(field, '(\d+?)\1')

如果您正在寻找任何重复的字符,或者:

[...] WHERE REGEXP_LIKE(field, '^(\d+?)\1$')

如果你想检查字段中的整个字符串。

\d+?将匹配数字。

( ... )将存储这些数字。

\1指的是捕获的数字。

注意:如果您不检查数字,请更改为\d.

答案 1 :(得分:0)

试试这个:

SQL> WITH t AS
  2           (SELECT '1414,200200,11,12,33,33,1234,1234' test_string
  3              FROM DUAL)
  4      SELECT     LTRIM (SYS_CONNECT_BY_PATH (test_string, ','), ',') names
  5            FROM (SELECT ROW_NUMBER () OVER (ORDER BY test_string) rno, test_string
  6                    FROM (SELECT DISTINCT REGEXP_SUBSTR (test_string,
  7                                                         '[^,]+',
  8                                                         1,
  9                                                         LEVEL
 10                                                       ) test_string
 11                                    FROM t
 12                              CONNECT BY LEVEL <=
 13                                              LENGTH (test_string)
 14                                            - LENGTH (REPLACE (test_string,
 15                                                               ',',
 16                                                               NULL
 17                                                              )
 18                                                     )
 19                                           + 1))
 20          WHERE CONNECT_BY_ISLEAF = 1 AND ROWNUM = 1
 21     CONNECT BY rno = PRIOR rno + 1;

NAMES
--------------------------------------------------------------------------------
11,12,1234,1414,200200,33

没有分隔的字符串重复!