LIKE matches text against a simple pattern with two wildcards; regular expressions are available as dialect extensions.
| Wildcard | Matches | Example | Matches… |
|---|---|---|---|
% | Any sequence of 0+ characters | 'A%' | Asha, Arjun |
_ | Exactly one character | '_a%' | Ravi, Karan, Sara (second letter a) |
SELECT name FROM employees WHERE name LIKE 'A%' ORDER BY name;
SELECT name FROM employees WHERE name LIKE '_a%' ORDER BY name;
SELECT name FROM employees WHERE name LIKE '%an%' ORDER BY name;name
-----
Arjun
Asha
name
-----
Karan
Ravi
Sara
name
-----
KaranCase sensitivity
SQLite's LIKE is case-insensitive for ASCII letters; PostgreSQL's LIKE is case-sensitive (use ILIKE); MySQL/SQL Server follow the column collation (usually insensitive). Portable trick: compare lowercased values.
SELECT name FROM employees WHERE name LIKE 'a%' ORDER BY name; -- SQLite: matches A
SELECT name FROM employees WHERE name GLOB 'a*' ORDER BY name; -- GLOB: case-sensitive
SELECT name FROM employees WHERE lower(name) LIKE 'a%' ORDER BY name; -- portablename
-----
Arjun
Asha
name
----
name
-----
Arjun
AshaMatching a literal % or _
CREATE TABLE promos (code TEXT);
INSERT INTO promos VALUES ('SAVE10%'), ('SAVE10'), ('FLAT_50'), ('FLATX50');
SELECT code FROM promos WHERE code LIKE '%\%' ESCAPE '\' ORDER BY code;
SELECT code FROM promos WHERE code LIKE 'FLAT\_%' ESCAPE '\' ORDER BY code;
SELECT code FROM promos WHERE code LIKE 'FLAT_%' ORDER BY code; -- _ is a wildcard!code
-------
SAVE10%
code
-------
FLAT_50
code
-------
FLATX50
FLAT_50Regular expressions (dialects)
SELECT name FROM employees WHERE name ~ '^[AEIOU]'; -- PostgreSQL (~* = case-insensitive)
SELECT name FROM employees WHERE name REGEXP '^[AEIOU]'; -- MySQL
SELECT name FROM employees WHERE REGEXP_LIKE(name, '^[AEIOU]'); -- Oracle / MySQL 8Find names that start and end with a vowel.