for example:
| id | center |
|---|---|
| 1 | man |
| 2 | some men here |
I want to select rows with three or more words so ouput should be:
| id | center |
|---|---|
| 2 | some men here |
I've tried using this: regexp_like(center, '\w{3,}') but it's not giving the expected output.
CodePudding user response:
You can use REGEXP_COUNT to look for more than 2 sets of words
WITH
some_table (id, center)
AS
(SELECT 1, 'man' FROM DUAL
UNION ALL
SELECT 2, 'some men here' FROM DUAL)
SELECT *
FROM some_table
WHERE REGEXP_COUNT (center, '\w ') > 2;
CodePudding user response:
You could use the regex pattern \w \w \w :
SELECT id, center
FROM yourTable
WHERE REGEXP_LIKE(center, '\w [:space:] \w [:space:] \w );
CodePudding user response:
I think this is the regex you are looking for:
regexp_like(center, '((\s|^)\w (\s|$)?){3,}')
or with a short test:
select * from (
select 'abc' center
from dual
union all
select 'abc def'
from dual
union all
select 'abc def ghi'
from dual
union all
select 'abc def ghi jkl'
from dual
)
where regexp_like(center, '((\s|^)\w (\s|$)?){3,}')
It says
Start of line or whitespace
One or more letters
Whitespace or end of line, non-greedy
Repeat all of the above at least three times
