Oracle 10g SQL regexp_like

时间:2013-12-04 12:56:50

标签: mysql sql regex oracle oracle10g

我想询问是否有可能在正则表达式中识别给定数字中是否有3个实例。

例如:

123456141414
123456171717

在上面的例子中我们有3x14和3x17所以它应该返回regexp_like查询中的数字。

但它应该返回所有出现的相同数字的3倍。

2 个答案:

答案 0 :(得分:1)

请试试这个:

SELECT INPUT_TEXT, REGEXP_SUBSTR(INPUT_TEXT, '([[:digit:]]{2})\1\1', 6) EXTRACTED
FROM MY_TABLE
WHERE REGEXP_INSTR(INPUT_TEXT, '([[:digit:]]{2})\1\1', 6) > 0

输入表格值:

 INPUT_TEXT
--------------
 123456141414
 123456171717
 123456111111
 141414123456
 123456121234

查询结果:

 INPUT_TEXT        EXTRACTED
--------------   --------------
 123456111111       111111
 123456141414       141414
 123456171717       171717

答案 1 :(得分:0)

如果我正确地阅读了您的更新要求,您将检查您是否有六位数,然后是一对重复三次的数字。在这种情况下,Reza的回复应修改为:

select * from (
select '123456343434' str from dual union all
select '123456555555' str from dual union all
select '1234565555550' str from dual union all
select '123456232324' str from dual union all
select '123456111110' str from dual )
where regexp_like(str,'^([[:digit:]]{6})([[:digit:]]{2})\2\2$')

给出:

STR          
123456343434 
123456555555 

编辑添加 - 如果你想提取重复的实际数字对:

select regexp_replace(str,'^([[:digit:]]{6})([[:digit:]]{2})\2\2$','\2') result 
from (
select '123456343434' str from dual union all
select '123456555555' str from dual union all
select '123456555555a' str from dual union all
select '123456232324' str from dual union all
select '123456111110' str from dual )
where regexp_like(str,'^([[:digit:]]{6})([[:digit:]]{2})\2\2$')