Mencari & Mengolah Teks: LIKE, ILIKE, dan Fungsi String
Pencarian pola dengan LIKE dan ILIKE (tanpa peduli huruf besar-kecil), wildcard % dan _, menyambung teks, serta fungsi UPPER, LOWER, LENGTH, TRIM, SUBSTRING, REPLACE.
Analogi: LIKE itu seperti fitur cari (Ctrl+F) di dokumen: kamu mengetik sepotong kata dan database mencari semua yang mengandungnya. Tanda % adalah "kartu joker" yang bisa mewakili kata apa saja, _ mewakili satu huruf saja. ILIKE adalah versi yang tidak peduli huruf besar-kecil.
Mencari dengan pola: LIKE
Kadang kamu tidak tahu teks persisnya, hanya sepotong. LIKE mencocokkan pola dengan dua karakter pengganti (wildcard):
| Wildcard | Artinya | Contoh | Cocok dengan |
|---|---|---|---|
% | nol atau lebih karakter apa saja | 'Do%' | Doraemon, Dongeng |
_ | tepat satu karakter apa saja | 'B_mi' | Bumi |
SELECT judul FROM buku WHERE judul LIKE 'One%'; -- diawali "One"
SELECT judul FROM buku WHERE judul LIKE '%SQL%'; -- mengandung "SQL" di mana saja
SELECT judul FROM buku WHERE judul LIKE '%Vol. 1'; -- diakhiri "Vol. 1"
Perbedaan penting dengan MySQL: LIKE peka huruf besar-kecil
Di PostgreSQL, LIKE membedakan huruf besar dan kecil: '%sql%' tidak cocok dengan "Dasar-Dasar SQL". Solusinya ILIKE (insensitive LIKE), fitur khas PostgreSQL:
SELECT judul FROM buku WHERE judul ILIKE '%sql%'; -- cocok, abaikan besar-kecil
Ingat: LIKE = persis huruf, ILIKE = bebas huruf. Untuk fitur pencarian di aplikasi, hampir selalu kamu butuh ILIKE.
Kebalikannya: NOT LIKE dan NOT ILIKE.
Fungsi teks yang sering dipakai
| Fungsi | Hasil | Contoh |
|---|---|---|
UPPER(t) / LOWER(t) | huruf besar / kecil | UPPER('buku') → BUKU |
LENGTH(t) | jumlah karakter | LENGTH('Dilan') → 5 |
TRIM(t) | buang spasi di tepi | TRIM(' hai ') → hai |
SUBSTRING(t FROM 1 FOR 3) | potong teks | SUBSTRING('Dilan' FROM 1 FOR 3) → Dil |
REPLACE(t, lama, baru) | ganti teks | REPLACE('a-b','-',' ') → a b |
INITCAP(t) | huruf awal tiap kata kapital | INITCAP('belajar sql') → Belajar Sql |
CONCAT(a, b, ...) | sambung teks, NULL dianggap kosong | CONCAT('A', NULL, 'B') → AB |
a || b | sambung teks, NULL membuat hasil NULL | 'A' || NULL → NULL |
SELECT UPPER(judul) AS judul_besar, LENGTH(judul) AS panjang
FROM buku
WHERE kategori_id = 4;
Menyambung kolom jadi kalimat
SELECT penulis || ' menulis "' || judul || '"' AS kalimat FROM buku;
Perhatikan kutip ganda di dalam teks aman karena berada di dalam kutip tunggal.
Jebakan: pola LIKE '%kata%' (wildcard di depan) memaksa database membaca seluruh tabel, lambat di data jutaan baris. Untuk pencarian teks serius, PostgreSQL punya full-text search dan ekstensi pg_trgm.
Kasus nyata: kolom pencarian di toko online
Pengunjung mengetik "kancil" di kotak pencarian, padahal judulnya ditulis "Kancil dan Buaya". Tanpa ILIKE, pencarian gagal karena beda huruf besar:
SELECT judul, penulis FROM buku
WHERE judul ILIKE '%kancil%' OR penulis ILIKE '%kancil%';Untuk data yang sangat besar, pencarian %kata% lambat karena memindai semua baris. Solusi lanjutannya (full-text search dan index trigram) adalah fitur khas PostgreSQL.
Kesalahan yang sering terjadi
- Memakai
LIKElalu heran kenapa "kancil" tidak menemukan "Kancil". Di PostgreSQLLIKEpeka huruf besar-kecil. - Menaruh
%di depan pola (%kata) pada tabel jutaan baris tanpa memikirkan kinerja. - Lupa menyaring spasi liar di data. Gunakan
TRIM()sebelum membandingkan.