snippetsqlMinor
How do I use the POSIX character classes upper and lower to search text in MySQL?
Viewed 0 times
thesearchlowertextposixcharacteruppermysqlclasseshow
Problem
I would like to search a body of text to find out when a specific word has been upper cased. MySQL has a REGEXP function with the POSIX character class [[:upper:]], but for the life of me I can't get it to return any results.
Say I want to search a column for the string literal 'FREE' only in upper case.
Let's say the table structure is something like:
I want to find body_text columns where the word FREE is in all uppercase, e.g.
But of course that syntax is invalid.
Help?
Say I want to search a column for the string literal 'FREE' only in upper case.
Let's say the table structure is something like:
CREATE TABLE article_body (
id INT NOT NULL AUTO_INCREMENT,
article_id INT NOT NULL,
summary VARCHAR(255),
body_text TEXT,
PRIMARY KEY(id));I want to find body_text columns where the word FREE is in all uppercase, e.g.
SELECT id, summary FROM article_body WHERE body_text REGEXP '[[:upper:]]+FREE';But of course that syntax is invalid.
Help?
Solution
From the article on mysql REGEXP:
REGEXP is not case sensitive, except when used with binary strings.
A simple solution would be to use the BINARY operator:
As to why your example doesn't work, the way I interpret it is "Any string with one or more uppercase letter followed by FREE", but of course FREE is case-insensitive there.
REGEXP is not case sensitive, except when used with binary strings.
A simple solution would be to use the BINARY operator:
SELECT * FROM article_body WHERE body_text REGEXP BINARY "FREE";As to why your example doesn't work, the way I interpret it is "Any string with one or more uppercase letter followed by FREE", but of course FREE is case-insensitive there.
Code Snippets
SELECT * FROM article_body WHERE body_text REGEXP BINARY "FREE";Context
StackExchange Database Administrators Q#2522, answer score: 3
Revisions (0)
No revisions yet.