Learn how to Make Money Online doing freelancing, Affiliate Marketing, Blogging and many more ...
Go4Expert
Go4Expert RSS Feed

Go Back   Programming and SEO Forum >  Go4Expert > Articles / Source Code > Database > MySQL / PostGRESQL

Discuss / Comment  Copy HTML to Clipboard  Copy BBCode to Clipboard  | More
 
Bookmarks Article Tools Search this Article Display Modes

Regular Expressions in MySQL


On 24th December, 2006
Wink Regular Expressions in MySQL

Show Printable Version Email this Page Subscription Add to Favorites Copy Regular Expressions in MySQL link

Author

decodec ( Light Poster )

Yet to provide details about himself


All articles By decodec

Recent Articles

Similar Articles

Introduction



A very interesting and useful capability of MySQL is to incorporate Regular Expressions (regex) in SQL queries. The regular expression support in MySQL is extensive. Let's take a look at using Regular Expressions in queries and the supported metacharacters.

Using Regular Expressions in queries



A simple example of using Regular Expressions in a SQL query would be to select all names from a table that start with 'A'.
Code: SQL
SELECT name FROM employees WHERE name REGEXP '^A'
A slight modification in the above example to look for names starting with 'A' or 'D' or 'F' will look like this.
Code: SQL
SELECT name FROM employees WHERE name REGEXP '^(A|D|F)'
If we want to select all names ending with 'P', then the SQL query goes like this
Code: SQL
SELECT name FROM employees WHERE name REGEXP 'P$'
We can use much complex patterns in our SQL queries, but first let's have a look at various MySQL Regular Expression metacharacters.

Regular Expression Metacharacters



*
Matches zero or more instances of the string preceding it
+
Matches one or more instances of the string preceding it
?
Matches zero or one instances of the string preceding it
.
Matches any single character, except a newline
[xyz]
Matches any of x, y, or z (match one of enclosed characters)
[^xyz]
Matches any character not enclosed
[A-Z]
Matches any uppercase letter
[a-z]
Matches any lowercase letter
[0-9]
Matches any digit
^
Anchors the match from the beginning
$
Anchors the match to the end
|
Separates alternatives
{n,m}
String must occur at least n times, but not more than m times
{n}
String must occur exactly n times
{n,}
String must occur at least n times
[[:<:]]
Matches beginning of words
[[:>:]]
Matches ending of words
[:class:]
match a character class i.e.,

[:alpha:] for letters
[:space:] for whitespace
[:punct:] for punctuation
[:upper:] for upper case letters
Extras

MySQL interprets a backslash (\) character as an escape character. To use a backslash in a regular expression, you must escape it with another backslash (\\).

Whether the Regular Expression match is case sensitive or otherwise is decided by the collation method of the table. If your collation method name ends with ci then the comparison/match is case-insensitive, else if it end in cs then the match is case sensitive.

Examples



Checking only for numbers
Code: SQL
SELECT age FROM employees WHERE age REGEXP '^[0-9]+$'

/* starts, ends and contains numbers */
Contains a specific word, for example the skill PHP in skill sets
Code: SQL
SELECT name FROM employees WHERE skill_sets REGEXP '[[:<:]]php[[:>:]]'
Fetching records where employees have entered their 10-digit mobile number as the contact number.
Code: SQL
SELECT name FROM employees WHERE contact_no REGEXP '^[0-9]{10}$'
Old 12-27-2006, 01:37 PM   #2
Team Leader
 
pradeep's Avatar
 
Join Date: Apr 2005
Location: Kolkata, India
Posts: 1,470
Thanks: 0
Thanked 35 Times in 30 Posts
Rep Power: 7
pradeep will become famous soon enough
Send a message via Yahoo to pradeep

Re: Regular Expressions in MySQL


We can also use RLIKE, it works just like REGEXP.
__________________
Vote for the Most Entertaining Member of 2008

To err is human,to detect is divine!
pradeep is offline   Reply With Quote
Old 01-24-2008, 08:57 AM   #3
Newbie Member
 
Join Date: Jan 2008
Location: Manila Philippines
Posts: 4
Thanks: 0
Thanked 0 Times in 0 Posts
Rep Power: 0
ash0279 is on a distinguished road
Send a message via Yahoo to ash0279

Re: Regular Expressions in MySQL


this is great!
from my local test results, it seems the more complex the search pattern goes, the faster it performs..
for the developers standpoint, i think this would really help them a lot since regexp are widely used in open source devt tools, esp perl.
my 2 cents..
ash0279 is offline   Reply With Quote
Old 05-01-2008, 08:25 AM   #4
Light Poster
 
Join Date: Feb 2008
Posts: 5
Thanks: 0
Thanked 0 Times in 0 Posts
Rep Power: 0
malu is on a distinguished road

Re: Regular Expressions in MySQL


Can someone tell me why would this be true?

searching text: [[:<:]]word[[:>:]]

DB: word-word2

Thanks
malu is offline   Reply With Quote
Old 05-01-2008, 10:53 AM   #5
Team Leader
 
pradeep's Avatar
 
Join Date: Apr 2005
Location: Kolkata, India
Posts: 1,470
Thanks: 0
Thanked 35 Times in 30 Posts
Rep Power: 7
pradeep will become famous soon enough
Send a message via Yahoo to pradeep

Re: Regular Expressions in MySQL


[[:<:]]word[[:>:]] is a word boundary match!

These markers stand for word boundaries. They match the beginning and end of words, respectively. A word is a sequence of word characters that is not preceded by or followed by word characters. A word character is an alphanumeric character in the alnum class or an underscore (_).
__________________
Vote for the Most Entertaining Member of 2008

To err is human,to detect is divine!
pradeep is offline   Reply With Quote
Old 06-01-2009, 05:37 AM   #6
Newbie Member
 
Join Date: Jun 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Rep Power: 0
mrcosgrove is on a distinguished road

Re: Regular Expressions in MySQL


I dont know if you can help me or not but what i am trying to do is search database for words containing certain letters eg. i fI entered TEST it would find words contianing those letters (or a subset of them)

so how would I write that. I tried:
regexp '[t{0,2}e{0,1},s{0,1}]' but that isnt working it says that its the wrong syntax.

So Im wondering how I would right an expression to do this?

Any help would be appreciated.
mrcosgrove is offline   Reply With Quote
Old 06-01-2009, 01:37 PM   #7
Team Leader
 
pradeep's Avatar
 
Join Date: Apr 2005
Location: Kolkata, India
Posts: 1,470
Thanks: 0
Thanked 35 Times in 30 Posts
Rep Power: 7
pradeep will become famous soon enough
Send a message via Yahoo to pradeep

Re: Regular Expressions in MySQL


Try
Code:
regexp 't{0,2}e{0,1}s{0,1}'
__________________
Vote for the Most Entertaining Member of 2008

To err is human,to detect is divine!
pradeep is offline   Reply With Quote
Old 09-23-2009, 06:07 PM   #8
Newbie Member
 
Join Date: Sep 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Rep Power: 0
gcue is on a distinguished road

Re: Regular Expressions in MySQL


i am trying to match string A to these scenarios (sql table values)

string A = "G283H88620TS"

matching sql table values
MX0G2H883H7426288620TS (contains the string but has characters before, in the middle, and at the end)
UIERG283H88620TSERU (contains the string but has characters before and at the end)
G283H88620TSKDJF (contains the string but has characters at the end
KEKEG283H88620TS (contains the string but has characters at the begining

unfortunately there is no pattern as to where these interrupting characters reside

(this only works for the last 3 scenarios but not the first)

"SELECT * FROM aInventoryInfo WHERE SerialNumber LIKE '%" & $serial & "%'"
gcue is offline   Reply With Quote
Old 10-10-2009, 06:11 AM   #9
Newbie Member
 
Join Date: Oct 2009
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Rep Power: 0
gicprope is on a distinguished road

Re: Regular Expressions in MySQL


Relational Database Design is one of the most powerful ways to ensure data integrity and a great way to kick-off any project. Very often the first thing developers do when starting a new project, or stub-project, is to design the database. This way the structure of the application is already in place and we just have to fill in the pieces with some server-side code. I’ve found when adding relational constraints to your database design you add in a very powerful error reporting tool that will let you know during the development process that you have allowed something to happen that shouldn’t have. In this article, I go through, step by step, showing how to set up a simple relational database and discuss the benefits that are enjoyed.

Let’s take a step back and describe what a relational database looks like. In any normal database design there are fields in one table that reference another table. For example, a books table might have a field labeled author_id which is meant to come from a table named authors. Creating hard-coded relations solidifies these associations and actually returns a MySQL error if violated.

As I hinted in the opening I have found this to be invaluable during the development and testing process as MySQL will immediately let me know that I have made a glaring error that otherwise may not have been noticed until after the service has launched. At that point the data could be irreparably corrupt and forced to start from scratch.

So let’s get right to it. For the purposes of this article, I’m going to pretend I’m creating a simple Books and Authors website with a simple 2-table setup. The first step is to create our tables.
Code: SQL


CREATE TABLE `library`.`books` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 150 ) NOT NULL ,
`author_id` INT UNSIGNED NOT NULL ,
PRIMARY KEY ( `id` ) ,
INDEX ( `author_id` )
) ENGINE = InnoDB
gicprope is offline   Reply With Quote
Old 11-04-2009, 10:59 AM   #10
Newbie Member
 
Join Date: Nov 2009
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Rep Power: 0
scvinodkumar is on a distinguished road
Smile

Re: Regular Expressions in MySQL


Is this both query are similar? or which query is best to you use.

SELECT name FROM employees WHERE skill_sets REGEXP '[[:<:]]php[[:>:]]'

SELECT name FROM employees WHERE skill_sets LIKE '%php%'
scvinodkumar is offline   Reply With Quote
Discuss / Comment  Copy HTML to Clipboard  Copy BBCode to Clipboard  | More


Currently Active Users Reading This Article: 1 (0 members and 1 guests)
 
Article Tools Search this Article
Search this Article:

Advanced Search
Display Modes
Bookmarks

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off

Similar Threads / Articles
Thread Thread Starter Forum Replies Last Post
Using Regular Expressions in Java pradeep Java 13 02-20-2008 04:07 PM
Regular Expressions in JavaScript decodec HTML/DHTML - JavaScript/VBScript 4 12-16-2006 04:07 PM
RESELLER WEB HOSTING - $9.99/MONTH For 5GB HD & 75GB BW! CPanel, PHP, MySQL & MORE! IncognitoNet Web hosting 0 07-30-2006 08:54 PM
Mastering Regular Expressions in PHP Kings PHP 5 03-29-2005 09:06 AM

 

All times are GMT +5.5. The time now is 05:28 AM.