Memecah String Menjadi Baris di SQL
Blog/Tutorial SQL/Memecah String Menjadi Baris di SQL

Memecah String Menjadi Baris di SQL

BimaBima
·6 September 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Memecah string di SQL berarti ngubah satu kolom teks berpemisah, misalnya 'apel,jeruk,mangga', jadi beberapa baris terpisah. Di PostgreSQL, cara paling gampang pakai string_to_table atau unnest(string_to_array(...)). Di SQL Server pakai STRING_SPLIT dengan CROSS APPLY, dan di MySQL 8 pakai recursive CTE atau JSON_TABLE. Ini kebalikan dari STRING_AGG yang justru nggabungin baris jadi satu teks.

Memecah string di SQL berarti ngubah satu kolom teks berpemisah, misalnya 'apel,jeruk,mangga', jadi beberapa baris terpisah biar tiap nilai bisa dihitung dan disaring sendiri.

Data model kayak ini sering muncul dari kolom tag, kategori, atau daftar produk yang dijejalin ke satu sel. Selama masih nyatu, kamu susah ngitung atau nge-filter per nilai. Setelah dipecah, tiap nilai jadi baris yang gampang diolah.

Di artikel ini kamu bakal belajar cara mecah string di PostgreSQL, SQL Server, dan MySQL, plus contoh nyata dari data produk UMKM.

Kenapa perlu memecah string jadi baris?

Nyimpen banyak nilai dalam satu sel, dipisah koma, ngelanggar prinsip data yang rapi. Kolom kayak gini bikin kamu nggak bisa JOIN, GROUP BY, atau filter per nilai dengan bener. Mecahnya jadi baris ngembaliin data ke bentuk yang bisa dianalisa.

Prinsip nyimpen satu nilai per sel ini bagian dari normalisasi data. Operasi mecah string ini kebalikan persis dari STRING_AGG yang nggabungin baris jadi satu teks. Satu misahin, satu nyatuin.

Gimana cara memecah string di PostgreSQL?

PostgreSQL punya beberapa cara. Yang paling ringkas sejak versi 14 adalah string_to_table, yang langsung ngubah teks berpemisah jadi kumpulan baris.

SELECT p.id, trim(t) AS tag
FROM produk p, string_to_table(p.tags, ',') AS t;

Fungsi trim di sini penting buat ngilangin spasi di sekitar tiap nilai, soalnya 'apel, jeruk' sering punya spasi setelah koma. Tanpa trim, tag-nya jadi ' jeruk' dengan spasi di depan.

Buat PostgreSQL versi lama yang belum punya string_to_table, pakai kombinasi unnest dan string_to_array yang hasilnya sama.

SELECT p.id, trim(t) AS tag
FROM produk p
CROSS JOIN unnest(string_to_array(p.tags, ',')) AS t;

Kalau pemisahnya nggak konsisten, misalnya kadang pakai spasi kadang nggak, pakai regexp_split_to_table biar lebih tahan variasi.

SELECT id, regexp_split_to_table(tags, '\s*,\s*') AS tag
FROM produk;

Gimana cara memecah string di SQL Server dan MySQL?

SQL Server punya fungsi bawaan STRING_SPLIT sejak versi 2016. Pasangin dengan CROSS APPLY biar tiap baris asal dipecah jadi banyak baris.

SELECT p.id, s.value AS tag
FROM produk p
CROSS APPLY STRING_SPLIT(p.tags, ',') AS s;

MySQL agak ribet karena nggak punya fungsi split bawaan sampai versi terbaru. Di MySQL 8, cara paling umum pakai recursive CTE atau ubah teksnya jadi JSON dulu lalu pakai JSON_TABLE. Kalau datamu banyak dan sering dipecah, mendingan benerin desain tabelnya di awal daripada mecah tiap query.

Contoh kasus: tag produk toko_berkah

Aku pegang tabel produk toko_berkah dengan 240 baris. Ada kolom tags yang isinya kategori dipisah koma, kayak 'sembako, promo, laris'. Aku mau tau tag mana yang paling sering nempel di produk.

SELECT trim(t) AS tag, COUNT(*) AS jumlah
FROM produk p, string_to_table(p.tags, ',') AS t
GROUP BY trim(t)
ORDER BY jumlah DESC;

Setelah dipecah, 240 produk berubah jadi 612 baris tag. Rata-rata tiap produk punya 2,55 tag. Hasilnya nunjukin tag 'sembako' nempel di 41% produk (98 dari 240), disusul 'promo' di 27%. Tanpa mecah string dulu, angka ini mustahil dihitung karena semua tag ketumpuk di satu sel.

Dari sini aku bisa lanjut, misalnya cari produk yang punya tag 'promo' tapi bukan 'laris', buat evaluasi promo yang nggak jalan.

Kesalahan umum memecah string

  • Lupa trim spasi. Nilai kayak ' jeruk' dengan spasi di depan bakal dianggap beda dari 'jeruk'.
  • Ngandelin urutan hasil. Beberapa fungsi split nggak jamin urutan. Kalau butuh posisi, pakai fungsi yang ngasih nomor indeks.
  • Nilai kosong kebawa. String kayak 'a,,b' bisa ngasih baris kosong di tengah. Saring pakai WHERE kalau nggak diinginkan.
  • Mecah tiap query padahal bisa dibenerin desainnya. Kalau kolom ini sering dipecah, mendingan simpan di tabel terpisah sejak awal.

FAQ

Pertanyaan yang sering muncul soal memecah string di SQL.

Penutup

Memecah string ngubah data yang ketumpuk jadi baris yang bisa dianalisa. Di PostgreSQL pakai string_to_table atau unnest, di SQL Server pakai STRING_SPLIT dengan CROSS APPLY. Jangan lupa trim spasi tiap nilai, dan saring baris kosong kalau perlu.

Kalau kolom berpemisah ini sering kamu olah, pertimbangkan benerin desain tabelnya sejak awal. Mau operasi kebalikannya? Baca STRING_AGG dan GROUP_CONCAT. Buat kasus di spreadsheet, ada fungsi SPLIT Google Sheets. Detail fungsinya ada di dokumentasi PostgreSQL string functions. Mau latihan query SQL? Kulik di NgulikSQL.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Semi Join dan Anti Join di SQL: Filter Pakai Tabel Lain
Tutorial SQL
14 November 2026•8 menit baca

Semi Join dan Anti Join di SQL: Filter Pakai Tabel Lain

Semi join ngambil baris yang punya pasangan di tabel lain, anti join ngambil yang nggak punya. Keduanya filter, bukan gabung kolom. Ini cara nulisnya di SQL pakai EXISTS dan NOT EXISTS.

BimaBima
EXISTS vs IN di SQL: Perbedaan dan Performa (2026)
Tutorial SQL
11 November 2026•9 menit baca

EXISTS vs IN di SQL: Perbedaan dan Performa (2026)

EXISTS dan IN sama-sama nyaring baris pakai subquery, tapi cara kerja dan performanya beda. Ini panduan milih yang tepat plus jebakan NULL-nya.

BimaBima
Crosstab (Pivot) di PostgreSQL: Ubah Baris Jadi Kolom
Tutorial SQL
2 November 2026•11 menit baca

Crosstab (Pivot) di PostgreSQL: Ubah Baris Jadi Kolom

Crosstab di PostgreSQL mivot data dari format panjang (baris) jadi format lebar (kolom), mirip pivot table Excel. Butuh extension tablefunc, dan ada alternatif pakai CASE atau FILTER kalau kolomnya tetap.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore