Adnan
Adnan

Reputation: 26350

Simple regular expression in Oracle

I have a table with the following values:

ID     NAME        ADDRESS
1      Bob         Super stree1 here goes
2      Alice       stree100 here goes
3      Clark       Fast left stree1005
4      Magie       Right stree1580 here goes

I need to make a query using LIKE and get only the row having stree1 (in this case only get the one with ID=1) and I use the following query:

select * from table t1 WHERE t1.ADDRESS LIKE '%stree1%';

But the problem is that I get all rows as each of them contains stree1 plus some char/number after.

I have found out that I can use REGEXP_LIKE as I am using oracle, what would be the proper regex to use in:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1');

Upvotes: 2

Views: 739

Answers (3)

sirak
sirak

Reputation: 11

The first '\W' is tells it it a non-word character since you need noting after 'stree1' but space and '$' tells take it as a valid string if it ends with stree1

select *
from table1
where regexp_like(address,'stree1(\W|$)')

Upvotes: 0

Michael Goldshteyn
Michael Goldshteyn

Reputation: 74370

I would think that this would be the reg-ex you are seeking:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1(?:[^[:word:]]|$)');

If you want to, you can further simplify this to:

select * from table t1 WHERE regexp_like(t1.ADDRESS ,'stree1(?:\W|$)');

That is, 'stree1' is not followed by a word character (i.e., is followed by space/punctuation/etc...) or 'stree1' appears at the end of the string. Of course there are many other ways to do the same thing, including word boundaries 'stree1\b', expecting particular characters after the 1 in stree1 (e.g., a white-space with 'stree1\s'), etc...

Upvotes: 4

tinifni
tinifni

Reputation: 2392

This may help:

stree1\b

Upvotes: 0

Related Questions