Fungsi Teks: CONCAT, UPPER, LEFT, LPAD, dan Teman-temannya
Mengolah teks langsung di query: menggabungkan, mengubah huruf, memotong, mengganti, menghitung panjang, dan membuat kode berformat rapi.
Fungsi = mesin kecil dengan input dan output
Fungsi menerima nilai di dalam kurung, memprosesnya, dan mengembalikan hasil. MySQL punya ratusan fungsi; kita pelajari yang paling berguna. Fungsi bisa dipakai di SELECT, WHERE, ORDER BY, dan lain-lain.
Fungsi teks populer
| Fungsi | Contoh | Hasil |
|---|---|---|
CONCAT(a, b, ...) | CONCAT('Kopi', ' ', 'Susu') | Kopi Susu |
CONCAT_WS(sep, a, b, ...) | CONCAT_WS('-', '2024', '03', '15') | 2024-03-15 |
UPPER(x) / LOWER(x) | UPPER('kopi') | KOPI |
LENGTH(x) / CHAR_LENGTH(x) | CHAR_LENGTH('Kopi') | 4 |
LEFT(x, n) / RIGHT(x, n) | LEFT('Americano', 3) | Ame |
SUBSTRING(x, mulai, panjang) | SUBSTRING('Americano', 4, 3) | ric |
TRIM(x) | TRIM(' halo ') | halo |
REPLACE(x, cari, ganti) | REPLACE('Es Teh', 'Teh', 'Jeruk') | Es Jeruk |
LPAD(x, panjang, isi) | LPAD(7, 3, '0') | 007 |
REVERSE(x) | REVERSE('abc') | cba |
LOCATE(cari, x) | LOCATE('o', 'Americano') | 8 (posisi pertama) |
Hati-hati: posisi karakter di MySQL dimulai dari 1, bukan 0 seperti di kebanyakan bahasa pemrograman. SUBSTRING('Kopi', 1, 1) menghasilkan 'K'. Di MySQL asli, LENGTH menghitung byte, jadi untuk teks berhuruf non-ASCII gunakan CHAR_LENGTH.
Contoh nyata
-- kartu nama: "Dewi Lestari (Jakarta)"
SELECT CONCAT(nama, ' (', kota, ')') AS keterangan FROM pelanggan;
-- kode produk rapi: KOP-001
SELECT CONCAT(UPPER(LEFT(nama, 3)), '-', LPAD(id, 3, '0')) AS kode FROM produk;
-- cari produk tanpa peduli huruf besar-kecil
SELECT * FROM produk WHERE LOWER(nama) LIKE '%kopi%';
-- inisial dari email: bagian sebelum @
SELECT SUBSTRING_INDEX(email, '@', 1) AS username FROM pelanggan;
Fungsi di dalam fungsi
Hasil sebuah fungsi bisa menjadi input fungsi lain. Baca dari dalam ke luar: UPPER(LEFT(nama, 3)) → ambil 3 huruf pertama, baru ubah jadi huruf besar.
Sentuhan performa: memakai fungsi pada kolom di WHERE (WHERE LOWER(nama) = 'kopi') membuat MySQL tidak bisa memakai index kolom itu. Di tabel besar, usahakan bandingkan langsung kolomnya.