Ever since Oracle introduced regular expression functions in the database, I have been a big fan of them. They really make certain tasks much easier and give you added functionality. One place I always used them is in my APEX apps where I supply the user with a search box to constrain the results of a query.
The old way I would have written the query constraint:
where upper(COL1) like ‘%’ || upper( :P1_SEARCH_TEXT ) || ‘%’
Now using REGEXP_LIKE() you can achieve the same functionality while simplifying the constraint. And you get the added bonus of advance searching for the power user.
where regexp_like( COL1, nvl(:P1_REGEXP,COL1), ‘ix’ )
The first thing you will probably notice is that there is no conditional operator in that expression. None is needed. The regexp_like function is a boolean function and is used as such.
So now, any basic search will work just as before. But now, you can issue regular expression searches as well. If you want all the entries that start with S, search for ^s
End with R, use r$
Start with S and end with H, use ^s.*h$
Start with S or end with R, use ^s|r$
All 4 letter names, use ^….$
Contains B, C, D or K, use [b-d,k]
How about all names with double letters, use (.)\1
There are many more things you can do. If you want to read up about regular expressions in oracle, docs can be found here.
Using regexp_like() opens up the advanced searching for all the regular expression junkies without compromising the simple searching and it add NO complexity to your applications.
I have staged a simple demo on apex.oracle.com, here