Pernah nggak kamu menerima kiriman data dari tim lain, dan isinya berantakan banget? Nama produk ada yang huruf kapital semua, ada yang huruf kecil semua, bahkan ada yang dicampur asal-asalan. Sebagai orang yang harus mengolah data itu di database, kamu mau nangis ๐ญ. Nah, di sinilah fungsi string MySQL hadir jadi penyelamat hidupmu!
Di artikel ke-18 dari seri 28 artikel Belajar Query SQL MySQL ini, kita akan bahas 5 fungsi string MySQL yang paling sering dipakai: CONCAT, LENGTH, UPPER, LOWER, dan SUBSTRING. Kelima fungsi ini adalah senjata andalan untuk memanipulasi dan memformat data teks langsung di dalam query — tanpa perlu buka Excel, tanpa perlu tulis kode Python dulu.
Kita akan praktik langsung menggunakan database toko online dengan tabel produk, pelanggan, dan pesanan. Jadi setiap contoh terasa nyata dan langsung bisa kamu adaptasi ke project kamu sendiri. Siap? Let's go! ๐
Menurut survei Stack Overflow Developer Survey, MySQL adalah database paling populer di dunia selama beberapa tahun berturut-turut. Dan di antara semua tipe fungsi MySQL, fungsi string adalah yang paling sering digunakan oleh developer dalam query sehari-hari — bahkan lebih sering dari fungsi agregasi seperti SUM dan COUNT!
๐ Setup: Data Toko Online Kita
Sebelum masuk ke fungsi-fungsinya, kita buat dulu tabel dan data sampelnya. Kita akan pakai tabel produk dan pelanggan dengan data yang sengaja dibuat "kotor" supaya kita bisa latihan membersihkannya.
-- Buat tabel produk CREATE TABLE produk ( id_produk INT PRIMARY KEY, nama_produk VARCHAR(100), kategori VARCHAR(50), harga DECIMAL(10,2) ); -- Isi data (nama sengaja campur huruf besar-kecil) INSERT INTO produk VALUES (1, 'sepatu running ADIDAS', 'olahraga', 450000), (2, 'KAOS POLO ralph lauren', 'fashion', 320000), (3, 'tas ransel eiger', 'outdoor', 580000), (4, 'jam tangan casio', 'aksesori', 275000), (5, 'SEPATU BOOT safety', 'industri', 390000); -- Buat tabel pelanggan CREATE TABLE pelanggan ( id_pelanggan INT PRIMARY KEY, nama_depan VARCHAR(50), nama_belakang VARCHAR(50), email VARCHAR(100), kota VARCHAR(50) ); INSERT INTO pelanggan VALUES (1, 'budi', 'santoso', 'budi.s@gmail.com', 'Surabaya'), (2, 'DEWI', 'RAHAYU', 'dewi.r@yahoo.com', 'Jakarta'), (3, 'Ahmad', 'Fauzi', 'ahmad.f@gmail.com', 'Bandung'), (4, 'siti', 'NURHALIZA','siti.n@hotmail.com', 'Medan'), (5, 'RIZKY', 'pratama', 'rizky.p@gmail.com', 'Yogyakarta');
๐ 1. CONCAT — Menggabungkan Teks
Bayangkan kamu punya dua lembar kertas, satu berisi nama depan, satu lagi nama belakang. Fungsi fungsi string MySQL CONCAT() ibarat lem kertas — ia menempelkan dua atau lebih string menjadi satu. Simpel tapi powerful banget!
-- Sintaks dasar CONCAT CONCAT(string1, string2, string3, ...) -- Contoh: gabungkan nama depan + spasi + nama belakang SELECT id_pelanggan, CONCAT(nama_depan, ' ', nama_belakang) AS nama_lengkap, email, kota FROM pelanggan;
๐ Hasil Query:
| id_pelanggan | nama_lengkap | kota | |
|---|---|---|---|
| 1 | budi santoso | budi.s@gmail.com | Surabaya |
| 2 | DEWI RAHAYU | dewi.r@yahoo.com | Jakarta |
| 3 | Ahmad Fauzi | ahmad.f@gmail.com | Bandung |
| 4 | siti NURHALIZA | siti.n@hotmail.com | Medan |
| 5 | RIZKY pratama | rizky.p@gmail.com | Yogyakarta |
Kalau salah satu value-nya NULL, hasil CONCAT juga jadi NULL! Gunakan CONCAT_WS(separator, str1, str2) sebagai alternatif — fungsi ini secara otomatis mengabaikan nilai NULL dan lebih aman untuk production.
-- Membuat label produk: "Rp 450.000 | sepatu running ADIDAS"
SELECT
nama_produk,
CONCAT('Rp ', FORMAT(harga, 0, 'id_ID'), ' | ', kategori) AS label_produk
FROM produk;
๐ 2. LENGTH & CHAR_LENGTH — Mengukur Panjang Teks
Analoginya gampang: kalau kamu mau tahu berapa meter panjang pita pembungkus hadiah, kamu butuh penggaris. Nah, LENGTH() adalah "penggaris" untuk string di MySQL — ia menghitung jumlah byte, sedangkan CHAR_LENGTH() menghitung jumlah karakter.
Untuk teks berbahasa Indonesia yang menggunakan karakter UTF-8, LENGTH() bisa memberi hasil berbeda dari CHAR_LENGTH(). Contoh: karakter "รฉ" adalah 1 karakter tapi 2 byte. Gunakan CHAR_LENGTH() untuk kebutuhan validasi panjang teks yang lebih akurat.
-- Hitung panjang nama produk + filter nama yang terlalu panjang
SELECT
id_produk,
nama_produk,
CHAR_LENGTH(nama_produk) AS jumlah_karakter,
LENGTH(nama_produk) AS jumlah_byte
FROM produk
ORDER BY jumlah_karakter DESC;
๐ Hasil Query:
| id_produk | nama_produk | jumlah_karakter | jumlah_byte |
|---|---|---|---|
| 2 | KAOS POLO ralph lauren | 22 | 22 |
| 5 | SEPATU BOOT safety | 19 | 19 |
| 1 | sepatu running ADIDAS | 21 | 21 |
| 3 | tas ransel eiger | 16 | 16 |
| 4 | jam tangan casio | 16 | 16 |
๐ก 3. UPPER & LOWER — Standarisasi Huruf Besar/Kecil
Ini adalah fungsi string MySQL yang paling sering jadi "pemadam kebakaran" di dunia nyata. Coba bayangkan kamu punya tabel pelanggan yang data nama-nya campur aduk — ada yang nulis "BUDI", ada "budi", ada "Budi". Tanpa UPPER/LOWER, kamu akan punya masalah besar saat melakukan pencarian atau pencocokan data.
UPPER() mengubah semua karakter jadi HURUF KAPITAL, sementara LOWER() mengubah semuanya jadi huruf kecil. Sesederhana itu, tapi dampaknya luar biasa untuk konsistensi data.
-- Standarisasi nama produk: semua jadi huruf besar SELECT id_produk, nama_produk AS nama_asli, UPPER(nama_produk) AS nama_upper, LOWER(nama_produk) AS nama_lower FROM produk; -- Kasus nyata: pencarian tidak peduli huruf besar/kecil SELECT * FROM produk WHERE LOWER(nama_produk) LIKE '%sepatu%';
๐ Hasil Query (UPPER & LOWER):
| id_produk | nama_asli | nama_upper | nama_lower |
|---|---|---|---|
| 1 | sepatu running ADIDAS | SEPATU RUNNING ADIDAS | sepatu running adidas |
| 2 | KAOS POLO ralph lauren | KAOS POLO RALPH LAUREN | kaos polo ralph lauren |
| 3 | tas ransel eiger | TAS RANSEL EIGER | tas ransel eiger |
| 4 | jam tangan casio | JAM TANGAN CASIO | jam tangan casio |
| 5 | SEPATU BOOT safety | SEPATU BOOT SAFETY | sepatu boot safety |
Jangan langsung UPDATE data asli di tabel! Gunakan UPPER/LOWER di query SELECT dulu untuk preview hasilnya. Kalau sudah yakin, baru jalankan UPDATE produk SET nama_produk = UPPER(nama_produk) untuk mengubah data permanen. Selalu backup dulu sebelum mass update!
✂️ 4. SUBSTRING — Memotong Teks
Kalau CONCAT adalah "lem", maka SUBSTRING() adalah "gunting". Fungsi ini memotong dan mengambil sebagian teks dari posisi tertentu. Sangat berguna untuk mengekstrak kode produk, inisial nama, domain email, dan masih banyak lagi.
-- Sintaks SUBSTRING SUBSTRING(string, posisi_awal, panjang) -- ↑ ↑ ↑ -- teks mulai di ambil berapa -- karakter ke- karakter -- Contoh: ambil 3 huruf pertama nama kategori sebagai kode SELECT id_produk, nama_produk, kategori, UPPER(SUBSTRING(kategori, 1, 3)) AS kode_kategori, SUBSTRING(nama_produk, 1, 10) AS nama_singkat FROM produk; -- Ekstrak domain dari email pelanggan SELECT nama_depan, email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain_email FROM pelanggan;
๐ Hasil Query (kode kategori + nama singkat):
| id_produk | nama_produk | kategori | kode_kategori | nama_singkat |
|---|---|---|---|---|
| 1 | sepatu running ADIDAS | olahraga | OLA | sepatu run |
| 2 | KAOS POLO ralph lauren | fashion | FAS | KAOS POLO |
| 3 | tas ransel eiger | outdoor | OUT | tas ransel |
| 4 | jam tangan casio | aksesori | AKS | jam tangan |
| 5 | SEPATU BOOT safety | industri | IND | SEPATU BOO |
๐งช Panduan Praktikum: Query Kombinasi Fungsi String MySQL
Sekarang kita gabungkan semua fungsi dalam satu skenario nyata: membuat laporan kartu pelanggan yang rapi dan terstandarisasi. Ikuti langkah-langkah berikut satu per satu.
Buat nama lengkap terstandar (Title Case)
Gabungkan nama depan dan belakang dengan CONCAT, lalu konversi ke UPPER untuk konsistensi.
-- Langkah 1: Nama lengkap dalam huruf kapital semua
SELECT
id_pelanggan,
UPPER(CONCAT(nama_depan, ' ', nama_belakang)) AS nama_lengkap
FROM pelanggan;
Buat kode ID pelanggan dari inisial + ID
Kombinasi SUBSTRING dan CONCAT untuk membuat kode unik pelanggan.
-- Langkah 2: Kode pelanggan = "PLG-" + inisial + ID
SELECT
id_pelanggan,
CONCAT(
'PLG-',
UPPER(SUBSTRING(nama_depan, 1, 1)),
UPPER(SUBSTRING(nama_belakang, 1, 1)),
LPAD(id_pelanggan, 3, '0')
) AS kode_pelanggan,
nama_depan, nama_belakang
FROM pelanggan;
Standarisasi email ke huruf kecil
Email selalu lowercase — cegah duplikasi data dengan LOWER().
-- Langkah 3: Email distandarkan ke lowercase
SELECT
id_pelanggan,
LOWER(email) AS email_standar,
CHAR_LENGTH(email) AS panjang_email
FROM pelanggan
WHERE CHAR_LENGTH(email) BETWEEN 10 AND 50;
Gabungkan semua: Query Kartu Pelanggan Final
Ini dia query pamungkasnya — semua fungsi digabung dalam satu SELECT!
-- Langkah 4: Laporan kartu pelanggan lengkap
SELECT
CONCAT(
'PLG-',
UPPER(SUBSTRING(nama_depan, 1, 1)),
UPPER(SUBSTRING(nama_belakang, 1, 1)),
LPAD(id_pelanggan, 3, '0')
) AS kode_pelanggan,
UPPER(CONCAT(nama_depan, ' ', nama_belakang)) AS nama_lengkap,
LOWER(email) AS email,
UPPER(kota) AS kota,
CHAR_LENGTH(
CONCAT(nama_depan, ' ', nama_belakang)
) AS panjang_nama
FROM pelanggan
ORDER BY nama_depan ASC;
๐ Tabel Ringkasan: 5 Fungsi String MySQL
Berikut ringkasan lengkap kelima fungsi string MySQL yang sudah kita pelajari hari ini. Jadikan ini sebagai cheat sheet kamu!
| Fungsi | Kegunaan | Contoh Penggunaan | Return Value |
|---|---|---|---|
CONCAT() |
Menggabungkan 2+ string | CONCAT('A', ' ', 'B') |
'A B' |
LENGTH() |
Hitung jumlah byte | LENGTH('Halo') |
4 |
CHAR_LENGTH() |
Hitung jumlah karakter | CHAR_LENGTH('Halo') |
4 |
UPPER() |
Ubah ke huruf kapital | UPPER('halo') |
'HALO' |
LOWER() |
Ubah ke huruf kecil | LOWER('HALO') |
'halo' |
SUBSTRING() |
Potong/ambil sebagian teks | SUBSTRING('Halo',1,2) |
'Ha' |
Jangan takut nesting fungsi! Di MySQL, kamu bisa menaruh fungsi di dalam fungsi, seperti UPPER(SUBSTRING(nama, 1, 1)). Ini sangat powerful. Tapi jangan berlebihan — kalau sudah lebih dari 3 level nesting, pertimbangkan untuk memecah query jadi beberapa langkah atau pakai subquery agar tetap mudah dibaca.
Fungsi string di WHERE clause bisa memperlambat query! Ketika kamu menggunakan WHERE LOWER(email) = 'budi@gmail.com', MySQL tidak bisa memanfaatkan index pada kolom email secara optimal. Solusinya: simpan data yang sudah distandarkan sejak awal, atau gunakan functional index di MySQL 8.0+. Performa database sama pentingnya dengan kebenaran hasil query!
๐ฏ Kesimpulan
Kita sudah menjelajahi 5 fungsi string MySQL yang wajib ada di toolkit kamu:
- CONCAT() — menggabungkan string, cocok untuk membuat label, nama lengkap, atau kode unik
- LENGTH() & CHAR_LENGTH() — mengukur panjang teks, penting untuk validasi input
- UPPER() — standarisasi ke huruf kapital, ideal untuk kode dan header
- LOWER() — standarisasi ke huruf kecil, wajib untuk email dan username
- SUBSTRING() — mengambil potongan teks dari posisi tertentu, serbaguna untuk ekstraksi data
Ingat ya, data yang kotor dan tidak konsisten adalah musuh nyata seorang data engineer dan developer. Dengan menguasai fungsi string MySQL ini, kamu sudah punya "senjata" untuk membersihkan dan memformat data langsung di level database — lebih efisien, lebih cepat, dan lebih profesional! ๐ช
๐ Yuk ikut diskusi!
Ada fungsi string MySQL favorit kamu yang belum kita bahas? Atau punya kasus unik saat membersihkan data di project kamu? Ceritakan di kolom komentar! Jangan lupa share artikel ini ke teman sekelas yang lagi belajar MySQL juga. Makin banyak yang belajar bareng, makin seru! ๐
Artikel 19/28: Fungsi Date & Time MySQL — NOW, DATE_FORMAT, DATEDIFF
Setelah mahir memanipulasi teks, saatnya kuasai tanggal dan waktu! Di artikel berikutnya kita akan belajar cara menghitung umur data, memformat tanggal pesanan, dan mencari transaksi berdasarkan rentang waktu.
Baca Artikel Berikutnya →
No comments:
Post a Comment