Το LIKE ελέγχει αν ένα κείμενο ταιριάζει με ένα μοτίβο, όπου το % αντιστοιχεί σε οποιαδήποτε σειρά χαρακτήρων και το _ σε ακριβώς έναν. Έτσι βρίσκεις τιμές που περιέχουν, ξεκινούν ή τελειώνουν με κάποιο κείμενο. Τα παραδείγματα δουλεύουν σε PostgreSQL, MySQL, SQLite και SQL Server.
Πώς χρησιμοποιείς το LIKE
Το LIKE συγκρίνει μια τιμή με ένα μοτίβο. Το μοτίβο πρέπει να ταιριάζει με ολόκληρη την τιμή, με δύο wildcards για να καλύψουν τα κενά: το % ταιριάζει με οποιονδήποτε αριθμό χαρακτήρων (ακόμα και κανέναν) και το _ με ακριβώς έναν. Το NOT LIKE επιστρέφει το αντίθετο.
expression [NOT] LIKE pattern [ESCAPE escape_character]
-- In SQL Server, LIKE only works in a condition, such as a WHERE clause
SELECT 'Joe Bloggs' LIKE 'Jo%';
-- Output: true
SELECT 'Joe Bloggs' LIKE 'J_e%';
-- Output: true
SELECT 'Joe Bloggs' LIKE 'Bloggs';
-- Output: false
Το τελευταίο είναι false γιατί, χωρίς wildcard, το μοτίβο πρέπει να είναι ίσο με ολόκληρη την τιμή. Σε ένα query, το LIKE συνήθως μπαίνει στο WHERE:
-- Input: customers
-- id | name
-- ---+-------------
-- 1 | Joe Bloggs
-- 2 | Jane Doe
-- 3 | Joanna Smith
-- 4 | Bob Jones
SELECT name
FROM customers
WHERE name LIKE 'Jo%';
-- Output:
-- name
-- ------------
-- Joe Bloggs
-- Joanna Smith
Κανόνες που πρέπει να ξέρεις
-
Το LIKE της PostgreSQL κάνει διάκριση πεζών-κεφαλαίων. Οι άλλες βάσεις δεδομένων αγνοούν τα πεζά-κεφαλαία από προεπιλογή, αλλά στην PostgreSQL το
'Smith' LIKE 'smith'είναι false. Μετάτρεψε και τις δύο πλευρές σε πεζά, όπως στοLOWER(name) LIKE '%smith%', όταν τα πεζά-κεφαλαία δεν πρέπει να παίζουν ρόλο. -
Το NULL δεν ταιριάζει ποτέ. Το
NULL LIKE '%'είναι NULL, όχι true, οπότε οι γραμμές όπου η στήλη είναι NULL αποκλείονται και από το LIKE και από το NOT LIKE. ΠρόσθεσεOR column IS NULLαν τις θέλεις.
SELECT NULL LIKE '%';
-- Output: NULL
-
Κάνε escape τα
%και_για να τα ταιριάξεις κυριολεκτικά. Βάλε έναν χαρακτήρα escape μπροστά από το wildcard και δήλωσέ τον με τοESCAPE:
-- Input: discounts
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-- 2 | Spend 50, save 10
-- 3 | Up to 25% off shoes
-- Without escaping, the % after 50 is a wildcard
SELECT * FROM discounts
WHERE description LIKE '%50%%';
-- Output:
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-- 2 | Spend 50, save 10
-- With ESCAPE '\', the \% matches a real percent sign
-- (in MySQL, write ESCAPE '\\': a single backslash escapes the quote)
SELECT * FROM discounts
WHERE description LIKE '%50\%%' ESCAPE '\';
-- Output:
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-
Ένα
%στην αρχή δεν μπορεί να χρησιμοποιήσει index. Μια αναζήτηση προθέματος όπωςLIKE 'INV-2026-%'μπορεί να χρησιμοποιήσει index στη στήλη, αλλά τοLIKE '%widget%'πρέπει να ελέγξει κάθε γραμμή. Για να ψάξεις λέξεις σε μεγάλους όγκους κειμένου, χρησιμοποίησε καλύτερα την αναζήτηση πλήρους κειμένου της βάσης σου.
Εναλλακτική σύνταξη
Θα συναντήσεις επίσης αυτές τις επεκτάσεις που διαφέρουν ανά βάση δεδομένων:
-- PostgreSQL: ILIKE ignores case
SELECT 'SMITH' ILIKE 'smith';
-- Output: true
-- SQL Server: [ ] in a LIKE pattern matches one character from a set or range
SELECT CASE WHEN 'B12' LIKE '[A-C]%' THEN 'match' ELSE 'no match' END;
-- Output: match
-- MySQL: REGEXP for regular expressions (PostgreSQL uses ~)
SELECT 'A12-345' REGEXP '^A[0-9]{2}-[0-9]{3}$';
-- Output: 1
Για να ελέγξεις αν ένα κείμενο περιέχει ένα σταθερό string, χωρίς μοτίβο, βρες τη θέση του. Το αποτέλεσμα είναι 0 όταν το string δεν υπάρχει:
SELECT INSTR('FinTech Corp', 'Tech');
-- Output: 4
-- PostgreSQL: POSITION('Tech' IN 'FinTech Corp')
-- SQL Server: CHARINDEX('Tech', 'FinTech Corp')
Το CONTAINS() του SQL Server δεν είναι έλεγχος substring: είναι predicate αναζήτησης πλήρους κειμένου που χρειάζεται full-text index.
Πότε να χρησιμοποιείς το LIKE;
Χρησιμοποίησε το LIKE όταν ξέρεις μέρος μιας τιμής αλλά όχι ολόκληρη. Οι περισσότερες χρήσεις ανήκουν σε μία από αυτές τις τέσσερις.
Βρες κείμενο που περιέχει μια λέξη
Βάλε % και στις δύο πλευρές της λέξης. Το '%Tech%' ταιριάζει με “Tech Solutions Inc”, “FinTech Corp” και “Technology Partners”, γιατί ταιριάζει και μέσα σε μεγαλύτερες λέξεις.
Ταίριαξε την αρχή ή το τέλος μιας τιμής
Βάλε % μόνο στο τέλος για να ταιριάξεις πρόθεμα, όπως 'INV-2026-%', ή μόνο στην αρχή για να ταιριάξεις κατάληξη, όπως '%.pdf' ή '%@gmail.com'. Οι αναζητήσεις προθέματος είναι αυτές που μπορεί να επιταχύνει ένα index.
Ταίριαξε μια σταθερή μορφή
Το _ αντιστοιχεί σε ακριβώς έναν χαρακτήρα, οπότε ένα μοτίβο μπορεί να περιγράψει τη μορφή μιας τιμής: '___-___-____' για αριθμό τηλεφώνου, 'A__-___' για κωδικό προϊόντος. Με το NOT LIKE, το ίδιο μοτίβο βρίσκει τις τιμές που παραβιάζουν τη μορφή.
Αναζήτηση χωρίς να σε απασχολούν τα πεζά-κεφαλαία
Οι χρήστες γράφουν “smith”· τα δεδομένα λένε “Smith”. Μετάτρεψε και τις δύο πλευρές σε πεζά με το LOWER() και η αναζήτηση αγνοεί τα πεζά-κεφαλαία, ακόμα και στην PostgreSQL.
Πραγματικά παραδείγματα του LIKE
Αναζήτηση για οποιαδήποτε από πολλές λέξεις
Συνδύασε μοτίβα με OR για να βρεις προϊόντα που ταιριάζουν με οποιοδήποτε από αυτά:
-- Input: products
-- id | name
-- ---+-----------------
-- 1 | Gaming laptop
-- 2 | Spiral notebook
-- 3 | Desk lamp
-- 4 | Desktop computer
SELECT * FROM products
WHERE name LIKE '%laptop%'
OR name LIKE '%notebook%'
OR name LIKE '%computer%';
-- Output:
-- id | name
-- ---+-----------------
-- 1 | Gaming laptop
-- 2 | Spiral notebook
-- 4 | Desktop computer
Βρες τα τιμολόγια της φετινής χρονιάς
Οι αριθμοί τιμολογίων ξεκινούν με έναν τύπο και μια χρονιά, οπότε ένα μοτίβο προθέματος επιλέγει τα τιμολόγια του 2026 και παραλείπει τα πιστωτικά:
-- Input: invoices
-- invoice_no | customer
-- --------------+----------
-- INV-2026-0012 | Northwind
-- INV-2025-0981 | Contoso
-- CN-2026-0003 | Northwind
-- INV-2026-0040 | Fabrikam
SELECT * FROM invoices
WHERE invoice_no LIKE 'INV-2026-%';
-- Output:
-- invoice_no | customer
-- --------------+----------
-- INV-2026-0012 | Northwind
-- INV-2026-0040 | Fabrikam
Βρες αριθμούς τηλεφώνου σε λάθος μορφή
Ένα _ ανά χαρακτήρα περιγράφει τη μορφή που περιμένεις, και το NOT LIKE εμφανίζει τις γραμμές που πρέπει να διορθώσεις:
-- Input: customers
-- name | phone
-- ----------+---------------
-- Ana Lima | 555-010-1234
-- Ben Ode | (555) 010-9876
-- Cara Diaz | 5550104321
-- Dev Rao | 555-010-5555
SELECT name, phone FROM customers
WHERE phone NOT LIKE '___-___-____';
-- Output:
-- name | phone
-- ----------+---------------
-- Ben Ode | (555) 010-9876
-- Cara Diaz | 5550104321
Βρες ένα επώνυμο με οποιαδήποτε πεζά-κεφαλαία
Τα ονόματα που έχουν γραφτεί με κεφαλαία ή πεζά εμφανίζονται κανονικά όταν και οι δύο πλευρές μετατραπούν σε πεζά:
-- Input: customers
-- id | name
-- ---+------------
-- 1 | Anna Smith
-- 2 | BEN SMITH
-- 3 | Dana Jones
-- 4 | carla smith
SELECT * FROM customers
WHERE LOWER(name) LIKE '%smith%';
-- Output:
-- id | name
-- ---+------------
-- 1 | Anna Smith
-- 2 | BEN SMITH
-- 4 | carla smith
Περισσότερα για το LIKE
Σε αυτό το blog:
- Οδηγός για το SQL SUBSTRING: εξάγεις μέρος ενός string αφού το βρεις
- Οδηγός για το SQL not equal: το NOT LIKE μαζί με τους άλλους τρόπους αποκλεισμού γραμμών
- Οδηγός για το SQL CASE: χαρακτηρίζεις γραμμές με συνθήκες, μαζί και μοτίβα LIKE
- Δημιουργία indexes στην PostgreSQL: τα indexes που κάνουν γρήγορες τις αναζητήσεις προθέματος
- Οδηγός για το MySQL CREATE INDEX: το ίδιο για τη MySQL
Επίσημη τεκμηρίωση:
- PostgreSQL: LIKE
- MySQL: LIKE
- SQLite: Οι τελεστές LIKE, GLOB, REGEXP, MATCH και extract
- SQL Server: LIKE
Το Beekeeper Studio είναι ένα δωρεάν & open source GUI για βάσεις δεδομένων
Το καλύτερο εργαλείο για SQL queries & επεξεργασία που έχω χρησιμοποιήσει ποτέ. Μου δίνει ό,τι χρειάζομαι για να διαχειρίζομαι τη βάση δεδομένων μου. - ⭐⭐⭐⭐⭐ Mit
Το Beekeeper Studio είναι γρήγορο, εύχρηστο και κατανοητό με την πρώτη ματιά. Υποστηρίζει πάρα πολλές βάσεις δεδομένων και δουλεύει άψογα σε Windows, Mac και Linux.
Τι λένε οι χρήστες για το Beekeeper Studio
"Το Beekeeper Studio αντικατέστησε εντελώς την παλιά μου ροή εργασίας με SQL. Είναι γρήγορο, εύχρηστο και κάνει τη δουλειά με βάσεις δεδομένων ξανά απολαυστική."
"Έχω δοκιμάσει πολλά GUI για βάσεις δεδομένων, αλλά το Beekeeper βρίσκει την τέλεια ισορροπία ανάμεσα σε δυνατότητες και απλότητα. Απλώς δουλεύει."