I have dataset like below in table A and I want result-set where the pattern for value column is like ABC followed by any 8 digits.
Output should be like below after regex match
[
I tried to use regex_sbustr but failed to get actual result set for 8 digits pattern.
Will appreciate your help
CodePudding user response:
And to show @JNevil's REGEXP_LIKE solution working:
select
column1,
column2,
REGEXP_LIKE(column2, 'ABC[0-9]{8}.*') as match
from values
(1, 'ABC123456788999'),
(2, 'ABC123458765uhfh=hh'),
(3, 'BCA123456788999'),
(4, 'ABC987654321'),
(5, 'ABC876hjkl90'),
(6, 'ABC876');
gives:
COLUMN1 | COLUMN2 | MATCH |
---|---|---|
1 | ABC123456788999 | TRUE |
2 | ABC123458765uhfh=hh | TRUE |
3 | BCA123456788999 | FALSE |
4 | ABC987654321 | TRUE |
5 | ABC876hjkl90 | FALSE |
6 | ABC876 | FALSE |
thus in filtering form:
select
column1,
column2 as value
from values
(1, 'ABC123456788999'),
(2, 'ABC123458765uhfh=hh'),
(3, 'BCA123456788999'),
(4, 'ABC987654321'),
(5, 'ABC876hjkl90'),
(6, 'ABC876')
where REGEXP_LIKE(column2, 'ABC[0-9]{8}.*');
gives:
COLUMN1 | VALUE |
---|---|
1 | ABC123456788999 |
2 | ABC123458765uhfh=hh |
4 | ABC987654321 |
As per the documents, the LIKE version is automatically anchored, which means there is an implicit ^
and $
added to the begin/end of you regexp string, thus the need for the .*
in this solution, otherwise none of the given input will match, as they all have 9 or more tokens.
as seen here (with extra 8 numeric input):
select
column1,
column2,
REGEXP_LIKE(column2, 'ABC[0-9]{8}') as match
from values
(1, 'ABC123456788999'),
(2, 'ABC123458765uhfh=hh'),
(3, 'BCA123456788999'),
(4, 'ABC987654321'),
(5, 'ABC876hjkl90'),
(6, 'ABC876'),
(8, 'ABC12345678')
;
COLUMN1 | COLUMN2 | MATCH |
---|---|---|
1 | ABC123456788999 | FALSE |
2 | ABC123458765uhfh=hh | FALSE |
3 | BCA123456788999 | FALSE |
4 | ABC987654321 | FALSE |
5 | ABC876hjkl90 | FALSE |
6 | ABC876 | FALSE |
8 | ABC12345678 | TRUE |