Soal 1Di console kursus ini (SQLite), apa yang dikembalikan SELECT LENGTH('あいう');?
Fungsi ② — Fungsi String (LENGTH / TRIM / REPLACE / UPPER / SUBSTR)
Artikel kedua dari tiga artikel fungsi SQL. Mencakup LENGTH untuk menghitung karakter, TRIM untuk membersihkan spasi, REPLACE untuk substitusi, UPPER / LOWER untuk konversi huruf, dan SUBSTR — semua pada dataset staff yang dimuat dari CSV.
Data yang digunakan di artikel ini — tabel staff
Artikel fungsi kedua fokus pada fungsi string. Kita akan melewati fungsi-fungsi yang akan kamu pakai kapan pun kamu butuh membersihkan atau mengubah teks yang diambil dari tabel produksi: panjang, pembersihan spasi, substitusi, konversi huruf, dan ekstraksi substring.
Dataset adalah tabel staff yang sama seperti sebelumnya (10 baris: name / city / salary, dll.). Memakai nama di kolom name sebagai bintang, empat latihan mencakup perhitungan panjang, substitusi nama belakang, kapitalisasi, dan ekstraksi inisial.
Panjang string — `LENGTH` dan `CHAR_LENGTH`
Fungsi untuk mengukur panjang string berperilaku berbeda antara console kursus ini (SQLite) dan MySQL, jadi hati-hati:
- Console kursus ini (SQLite): LENGTH(s) mengembalikan jumlah karakter ('あいう' → 3)
- MySQL: LENGTH(s) mengembalikan jumlah byte ('あいう' → 9). Untuk mendapatkan jumlah karakter, pakai CHAR_LENGTH(s)
Contoh di sini bahasa Jepang, tapi jebakan yang sama berlaku untuk data non-ASCII apa pun: huruf Latin beraksen ('café' → 4 karakter / 5 byte), bahasa Vietnam ('phở' → 3 karakter / 5 byte), emoji ('🎉' → 1 karakter / 4 byte), dan seterusnya. Bahasa Indonesia natif sebagian besar ASCII jadi jarang kena, tapi begitu nama asing, emoji, atau teks bahasa lain masuk ke database, perbedaan ini langsung jadi penting.
-- 1) Hitung karakter (di console kursus ini, LENGTH mengembalikan jumlah karakter)
SELECT LENGTH('Alice'); -- 5
SELECT LENGTH('あいう'); -- 3 (di sini), 9 (LENGTH MySQL = jumlah byte)
-- 2) Urutkan berdasarkan panjang kolom
SELECT name, LENGTH(name) AS name_len FROM staff
ORDER BY name_len DESC;
-- Referensi: di MySQL, jumlah karakter adalah CHAR_LENGTH(s)
-- SELECT CHAR_LENGTH('あいう') FROM dual; -- 3
Pembersihan spasi dan substitusi — `TRIM` dan `REPLACE`
Di tabel dunia nyata, kamu akan menemukan spasi tak diinginkan — «seseorang melakukan copy-paste dengan spasi tambahan di awal/akhir», «sistem sebelum migrasi meninggalkan spasi full-width di dalam data», dll. `TRIM(s)` membersihkan spasi dari kedua ujung string; LTRIM(s) hanya membersihkan sisi kiri, dan RTRIM(s) hanya kanan.
`REPLACE(s, cari, ganti)` mengganti setiap kemunculan cari di s dengan ganti. Ini fungsi andalan untuk normalisasi dan migrasi — «singkat nama belakang umum Tanaka menjadi T. untuk tampilan ringkas», «tukar bagian domain alamat email dengan domain baru», dll. Gabungkan dengan UPDATE dan kamu bisa menulis ulang nilai langsung di tabelnya sendiri.
-- 1) Pembersihan spasi: TRIM / LTRIM / RTRIM
SELECT TRIM(' Hello '); -- 'Hello'
SELECT LTRIM(' Hello '); -- 'Hello '
SELECT RTRIM(' Hello '); -- ' Hello'
-- TRIM pada kolom: deteksi baris dengan spasi via selisih panjang
SELECT name FROM staff
WHERE LENGTH(name) <> LENGTH(TRIM(name));
-- 2) Substitusi: REPLACE
SELECT REPLACE('I LIKE APPLE', 'APPLE', 'BANANA');
-- 'I LIKE BANANA'
-- REPLACE pada kolom — singkat 'Tanaka' menjadi 'T.'
SELECT name, REPLACE(name, 'Tanaka', 'T.') AS short_name
FROM staff;
Aplikasikan TRIM — gabung dengan UPDATE untuk membenahi teks yang tidak konsisten
TRIM bukan hanya untuk membaca — dikombinasikan dengan UPDATE, ia bisa menulis ulang nilai langsung di tabel. Misalnya, untuk menormalisasi kolom name yang punya spasi tak diinginkan di awal/akhir secara massal, tulis sesuatu seperti UPDATE staff SET name = TRIM(name) WHERE LENGTH(name) <> LENGTH(TRIM(name)); — pola aman adalah filter dulu dengan WHERE, lalu UPDATE. Jika kamu menghapus WHERE, setiap baris terkena TRIM (sebagian besar tak berbahaya tapi UPDATE-nya sia-sia). REPLACE bekerja sama: UPDATE tabel SET kolom = REPLACE(kolom, 'A', 'B') adalah teknik dasar untuk perbaikan massal teks yang tidak konsisten.
Konversi huruf dan substring — `UPPER` / `LOWER` / `SUBSTR`
`UPPER(s)` mengonversi string menjadi semua huruf besar, dan `LOWER(s)` menjadi semua huruf kecil. Pakai keduanya saat kamu ingin kondisi pencarian tidak peka huruf besar/kecil (WHERE UPPER(email) = 'X@Y.COM') atau format tampilan yang konsisten. Tidak berefek pada karakter tanpa perbedaan huruf (seperti Jepang).
`SUBSTR(s, mulai, panjang)` mengekstrak `panjang` karakter dimulai dari posisi `mulai` (bisa juga ditulis sebagai SUBSTRING). Posisi di SQL dimulai dari 1, jadi SUBSTR('Alice Tanaka', 1, 5) mengembalikan 'Alice'. Hilangkan argumen ketiga dan ia mengembalikan semua hingga akhir; berikan mulai negatif seperti SUBSTR(s, -3) dan ia menghitung dari akhir.
-- 1) UPPER / LOWER
SELECT UPPER('apple'), LOWER('APPLE');
-- 'APPLE', 'apple'
-- Pada kolom: ambil nama dalam huruf besar dan kecil
SELECT name, UPPER(name) AS upper_name, LOWER(name) AS lower_name
FROM staff;
-- 2) SUBSTR: posisi berbasis 1
SELECT SUBSTR('Alice Tanaka', 1, 5); -- 'Alice'
SELECT SUBSTR('Alice Tanaka', 7, 6); -- 'Tanaka'
SELECT SUBSTR('Alice Tanaka', 7); -- 'Tanaka' -- hilangkan panjang → ke akhir
SELECT SUBSTR('Alice Tanaka', -6); -- 'Tanaka' -- negatif → dari akhir
-- Karakter pertama tiap nama
SELECT name, SUBSTR(name, 1, 1) AS initial FROM staff;
-- Referensi: REVERSE adalah fungsi MySQL / Oracle — tidak ada di console kursus ini
-- SELECT REVERSE('Alice Tanaka'); -- 'akanaT ecilA' (bekerja di MySQL)
Mencari posisi substring — `INSTR`
`INSTR(target, cari)` mengembalikan posisi (indeks berbasis 1) tempat `cari` muncul pertama kali di target. Posisi dimulai dari 1, dan jika string yang dicari tidak ditemukan, mengembalikan 0. Misalnya, INSTR('Alice Tanaka', ' ') mengembalikan 6 karena spasi ada di posisi ke-6.
Gabungkan dengan SUBSTR dan kamu bisa memotong string berdasarkan separator daripada posisi tetap. Kombo andalan untuk mengubah string panjang variabel — «pisahkan email di sekitar @», «ekstrak hanya nama belakang dari nama lengkap», dll.
-- 1) INSTR sendiri — cek posisi spasi
SELECT name, INSTR(name, ' ') AS space_pos FROM staff;
-- 'Alice Tanaka' → 6, 'Bob Suzuki' → 4, ...
-- 2) Gabungkan dengan SUBSTR untuk ekstrak nama belakang
SELECT name,
SUBSTR(name, INSTR(name, ' ') + 1) AS last_name
FROM staff;
-- 3) Pisahkan di sekitar '@' (contoh email)
SELECT INSTR('alice@example.com', '@'); -- 6
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa yang dikembalikan SELECT REPLACE('I LIKE APPLE', 'APPLE', 'BANANA');?
Soal 3Apa yang dikembalikan SELECT SUBSTR('Alice Tanaka', 7, 6);?