René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
regexp_like | ||
regexp_like (string, pattern); regexp_like (string, pattern, parameters);
parameters can be a combination of
regexp_like is an Oracle SQL function that enables regular expressions in queries. It enhances the «traditional» like.
regexp_like is a pattern condition.
Demonstrationcreate table strings ( str varchar2(30) ); create table patterns ( pat varchar2(50), dsc varchar2(30) ); insert into patterns values ('^[[:digit:]]{3}-[[:digit:]]{2}-[[:digit:]]{4}$', 'Social security number'); insert into patterns values ('[^[:alpha:]]([[:alpha:]]+)[^[:alpha:]] *\1' , 'Repeated words'); insert into patterns values ('^([[:lower:]]| )*$' , 'Only lowercase words'); insert into patterns values ('^[[:digit:]]+$' , 'Only digits'); insert into patterns values ('[[:digit:]]' , 'At least one digit'); insert into patterns values ('^-?[[:digit:]]*\.?[[:digit:]]+$' , 'Number'); insert into strings values ('987-65-4321'); insert into strings values ('hello foo bar'); insert into strings values ('4987-65-4321'); insert into strings values ('hello FOO BAR'); insert into strings values ('-4.55'); insert into strings values ('987-65-43213'); insert into strings values ('4.55'); insert into strings values ('hello bar bar'); insert into strings values (' 4.55'); insert into strings values ('1234567890'); insert into strings values ('hello FOO FOO'); select str,dsc from strings cross join patterns where regexp_like(str, pat) ; STR DSC ------------------------------ ------------------------------ 987-65-4321 Social security number hello bar bar Repeated words hello FOO FOO Repeated words hello foo bar Only lowercase words hello bar bar Only lowercase words 1234567890 Only digits 987-65-4321 At least one digit 4987-65-4321 At least one digit -4.55 At least one digit 987-65-43213 At least one digit 4.55 At least one digit 4.55 At least one digit 1234567890 At least one digit -4.55 Number 4.55 Number 1234567890 Number |