0Pricing
SQL Interview Prep · Pelajaran

Mengurai dan Memformat String

SUBSTRING, posisi, pemisahan, dan perubahan huruf besar-kecil di berbagai dialek.

Mengurai dan Memformat String adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Mengapa Fungsi Teks Sering Ditanyakan

Data nyata sering berantakan: nama lengkap yang perlu dipecah, domain email yang perlu diambil, kode yang tertanam dalam ID, dan penggunaan huruf besar-kecil yang tidak konsisten. Pewawancara menggunakan manipulasi teks untuk melihat apakah Anda dapat membersihkan dan membentuk ulang teks tanpa mengekspornya ke skrip.

Seperti halnya tanggal, fungsi-fungsi ini hanya sedikit distandardisasi, jadi tujuannya adalah memahami konsep dan variasi yang umum.

  • Pengambilan subteks dan posisi
  • Penggabungan
  • Pemisahan dan penggantian
  • Konversi huruf besar-kecil dan pemangkasan

SUBSTRING dan Posisi

SUBSTRING(s FROM start FOR length) adalah bentuk standar SQL; sebagian besar mesin basis data juga menerima SUBSTRING(s, start, length). Posisi dalam teks dimulai dari 1, sebuah jebakan klasik selisih satu bagi pemrogram yang terbiasa dengan bahasa berbasis 0.

POSITION(sub IN s) (atau STRPOS/CHARINDEX) menemukan posisi awal subteks dan mengembalikan 0 jika tidak ditemukan.

SELECT
  SUBSTRING('INV-2024-042' FROM 5 FOR 4) AS year,   -- '2024'
  POSITION('-' IN 'INV-2024-042')        AS first_dash; -- 4

Mengambil Domain Email

Ini adalah contoh penerapan yang sangat umum. Temukan @, lalu ambil semua teks setelahnya. Menggabungkan POSITION dengan SUBSTRING adalah pendekatan yang dapat digunakan lintas sistem.

Di PostgreSQL, Anda juga dapat menggunakan SPLIT_PART(email, '@', 2), yang lebih mudah dibaca dan layak disebut sebagai jawaban yang lazim.

-- Portable
SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM users;

-- Postgres idiom
SELECT SPLIT_PART(email, '@', 2) AS domain FROM users;

Penggabungan Lintas Dialek

Menggabungkan teks bergantung pada dialek, dan pewawancara mengharapkan Anda mengetahui variasinya.

  • Standar SQL / PostgreSQL / Oracle: operator ||.
  • MySQL: CONCAT(a, b, c) (operator || secara bawaan merupakan OR logis).
  • SQL Server: + untuk teks, atau CONCAT().

CONCAT() memperlakukan NULL sebagai teks kosong, sedangkan || dan + biasanya membuat seluruh hasil menjadi NULL jika salah satu operan bernilai NULL, yang merupakan sumber kesalahan yang sulit terlihat.

-- Postgres
SELECT first_name || ' ' || last_name AS full_name FROM people;

-- MySQL / SQL Server
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM people;

Jebakan Penggabungan NULL

Melanjutkan bagian sebelumnya: jika last_name bernilai NULL, maka first_name || ' ' || last_name menghasilkan NULL di PostgreSQL dan menghapus seluruh nama.

Perbaikan pencegahannya adalah menggunakan COALESCE pada bagian yang dapat bernilai NULL, atau menggunakan CONCAT_WS (penggabungan dengan pemisah), yang melewati nilai NULL dan hanya menyisipkan pemisah di antara nilai yang ada.

-- Safe in Postgres / MySQL
SELECT CONCAT_WS(' ', first_name, last_name) AS full_name FROM people;

-- Or guard each part
SELECT first_name || ' ' || COALESCE(last_name, '') FROM people;

Memisahkan Teks

"Ambil segmen ketiga dari kode yang dipisahkan tanda hubung" menguji kemampuan pemisahan. SPLIT_PART(s, delim, n) di PostgreSQL langsung mengembalikan bagian ke-n dan merupakan alat yang paling bersih.

MySQL tidak memiliki fungsi pemisahan langsung; pola umumnya adalah menggunakan SUBSTRING_INDEX bertingkat: ambil n bagian pertama, lalu ambil bagian terakhir dari hasil tersebut.

-- Postgres
SELECT SPLIT_PART('a-b-c-d', '-', 3); -- 'c'

-- MySQL: third part of a-b-c-d
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a-b-c-d', '-', 3), '-', -1); -- 'c'

Mengganti, Memangkas, dan Mengisi

Operasi pembersihan yang diharapkan dapat Anda kenali:

  • REPLACE(s, from, to) mengganti semua kemunculan.
  • TRIM(s) menghapus spasi di awal dan akhir; TRIM(BOTH 'x' FROM s) menghapus karakter tertentu.
  • LPAD(s, len, ch) / RPAD mengisi teks hingga lebar tetap, sehingga berguna untuk menambahkan angka nol pada ID.
SELECT
  REPLACE('555.123.4567', '.', '-') AS phone,   -- 555-123-4567
  TRIM('   hello   ')               AS clean,   -- 'hello'
  LPAD('42', 6, '0')                AS padded;   -- '000042'

Konversi Huruf Besar-Kecil dan Panjang

Menormalkan huruf besar-kecil sangat penting sebelum membandingkan atau mengelompokkan teks. UPPER dan LOWER tersedia secara umum; INITCAP (PostgreSQL/Oracle) mengubah setiap kata menjadi bentuk judul.

LENGTH(s) mengembalikan jumlah karakter pada sebagian besar mesin, tetapi perlu diperhatikan: SQL Server menggunakan LEN(), dan dalam konfigurasi tertentu LENGTH menghitung jumlah bita untuk teks multibita. Sebutkan nuansa ini untuk data non-ASCII.

SELECT
  LOWER(email)        AS email_norm,
  INITCAP(city)       AS city_pretty,  -- Postgres
  LENGTH(description)  AS chars
FROM places;

Pencocokan Pola di Luar LIKE

Ketika LIKE tidak cukup kuat, pewawancara senang melihat pemahaman tentang ekspresi reguler. PostgreSQL menyediakan operator ~ dan REGEXP_REPLACE / REGEXP_MATCHES; MySQL memiliki REGEXP / REGEXP_SUBSTR.

Contohnya, pertahankan hanya digit dari teks nomor telepon. Ekspresi reguler menjadikannya satu baris, bukan rangkaian pemanggilan REPLACE.

-- Postgres: strip non-digits
SELECT REGEXP_REPLACE('(555) 123-4567', '[^0-9]', '', 'g')
  AS digits; -- '5551234567'

Contoh Lebih Mendalam: Menormalkan dan Menghapus Duplikasi Nama

Ini adalah tugas pembersihan gabungan. Misalkan nama diterima dengan spasi yang tidak perlu dan huruf besar-kecil yang bercampur, sehingga menimbulkan duplikasi semu. Lakukan normalisasi terlebih dahulu, lalu kelompokkan.

Pangkas spasi, rapatkan spasi internal berlebih dengan ekspresi reguler, dan ubah menjadi huruf kecil sebelum menghitung nilai yang berbeda. Inilah jenis penalaran bertahap yang biasanya dihargai pewawancara.

SELECT
  LOWER(REGEXP_REPLACE(TRIM(name), '\s+', ' ', 'g')) AS norm_name,
  COUNT(*) AS occurrences
FROM contacts
GROUP BY 1
ORDER BY occurrences DESC;

Mengonversi Teks menjadi Angka dan Tanggal

Kolom teks sering menyimpan nilai yang seharusnya berupa angka atau tanggal. CAST(s AS INTEGER) atau bentuk singkat PostgreSQL s::int melakukan konversi, tetapi akan gagal jika masukannya tidak valid.

Untuk tanggal, TO_DATE(s, 'YYYY-MM-DD') (PostgreSQL/Oracle) mengurai teks dengan pola format yang eksplisit. Ini adalah pendekatan paling aman karena menghilangkan kerancuan tentang urutan hari dan bulan.

SELECT
  CAST(qty_text AS INTEGER)            AS qty,
  TO_DATE(order_str, 'DD/MM/YYYY')     AS order_date
FROM staging;

Pemeriksaan Singkat

Analisis perilaku NULL dalam penggabungan teks.

Ringkasan: Mengurai dan Memformat Teks

Poin penting untuk dibawa ke wawancara:

  • Posisi dalam teks dimulai dari 1; SUBSTRING + POSITION mengambil teks berdasarkan lokasi.
  • Gabungkan dengan || (PostgreSQL), CONCAT (MySQL), atau + (SQL Server), dan ingat propagasi NULL; lebih baik gunakan CONCAT_WS.
  • Pisahkan dengan SPLIT_PART (PostgreSQL) atau SUBSTRING_INDEX bertingkat (MySQL).
  • REPLACE, TRIM, LPAD, UPPER/LOWER membersihkan dan menormalkan teks; ekspresi reguler menangani kasus yang sulit.
  • Normalisasikan huruf besar-kecil dan spasi sebelum mengelompokkan untuk menghindari duplikasi semu.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengurai dan Memformat String” gratis?

Ya — teks lengkap “Mengurai dan Memformat String” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengurai dan Memformat String”?

SUBSTRING, posisi, pemisahan, dan perubahan huruf besar-kecil di berbagai dialek. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?

Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Mengurai dan Memformat String” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?

Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Aritmetika Tanggal dan Interval
  2. Memotong dan Mengelompokkan Tanggal
  3. Mengurai dan Memformat String
  4. Zona Waktu dan Stempel Waktu
← Kembali ke SQL Interview Prep