有没有办法在oracle表的varchar列中找到连续的重复字符,如1414,200200。 我们怎样才能用regexp来实现呢?
我用regexp无法实现它 我的例子我可以连续重复一个数字而不是一个模式
从双重选择regexp_substr('4120066','([[:alnum:]])\ 1',7,1,'i'); - 按预期获得输出
从双重选择regexp_substr('6360360','([[:alnum:]])\ 1',7,1,'i'); - 我也想选择这个,因为我有360后跟360
答案 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
没有分隔的字符串重复!