Fungsi String SQL: 12 Fungsi Teks yang Sering Dipakai Analis
Blog/Tutorial SQL/Fungsi String SQL: 12 Fungsi Teks yang Sering Dipakai Analis

Fungsi String SQL: 12 Fungsi Teks yang Sering Dipakai Analis

BimaBima
·7 Februari 2026·9 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Fungsi string SQL adalah fungsi bawaan database buat mengolah data teks: membersihkan spasi, mengubah huruf besar-kecil, memotong, mengganti, dan menggabungkan. Dua belas fungsi yang paling sering dipakai analis adalah LENGTH, UPPER, LOWER, TRIM, LTRIM/RTRIM, SUBSTRING, LEFT, RIGHT, REPLACE, CONCAT, POSITION, dan SPLIT_PART. Nama fungsinya sedikit beda antar database, tapi konsepnya sama.

Fungsi string SQL adalah fungsi bawaan database buat ngolah data teks — bersihin spasi, samain huruf, motong, ganti, gabung. Kamu bakal pakai ini tiap kali data yang masuk gak serapi yang kamu harapin.

Dan data nyata gak pernah rapi.

Nama pelanggan pakai spasi dobel. Kota ditulis "bandung", "Bandung", dan "BANDUNG " di baris berbeda. Nomor HP ada yang pakai tanda hubung, ada yang spasi, ada yang diawali +62. Dua belas fungsi di bawah ini yang bakal nyelametin kamu.

Kenapa fungsi string penting buat analis?

Dari dataset pelanggan ngulikdata (8.200 baris hasil import dari tiga marketplace), 31% kolom kota punya masalah kapitalisasi atau spasi berlebih. Tanpa dibersihin, GROUP BY kota ngasih 47 kota unik — padahal aslinya cuma 18.

Laporan yang bilang Bandung punya 40 pesanan bakal salah, karena 15 pesanan lainnya kecatat di "bandung" dengan huruf kecil.

Fungsi string yang benerin itu. Sekarang kita lihat satu per satu.

1. LENGTH — hitung panjang karakter

SELECT nama_lengkap, LENGTH(nama_lengkap) AS panjang
FROM pelanggan_kotor;

Kepakai buat deteksi data janggal. NIK harusnya 16 digit — kalau LENGTH-nya 15 atau 17, ada yang salah. Nomor HP harusnya 10–13 digit.

Di SQL Server, namanya LEN, bukan LENGTH. Ini beda pertama yang bikin query copy-paste sering gagal.

2. TRIM — buang spasi kiri kanan

SELECT TRIM(nama_lengkap) AS nama_bersih FROM pelanggan_kotor;
-- '  Budi Santoso ' jadi 'Budi Santoso'

Fungsi paling sering dipakai, titik. Spasi di ujung teks gak keliatan di layar tapi bikin JOIN gagal dan GROUP BY pecah. Lihat detailnya di halaman fungsi TRIM.

3 & 4. LTRIM dan RTRIM — buang spasi satu sisi

SELECT LTRIM(kota) AS tanpa_spasi_kiri,
       RTRIM(kota) AS tanpa_spasi_kanan
FROM pelanggan_kotor;

Jarang kepakai sendiri, tapi berguna kalau kamu sengaja mau pertahanin indentasi di satu sisi. Di Oracle, LTRIM dan RTRIM bisa buang karakter apa aja, bukan cuma spasi.

5 & 6. UPPER dan LOWER — samain huruf

SELECT LOWER(TRIM(kota)) AS kota_normal, COUNT(*) AS jumlah
FROM pelanggan_kotor
GROUP BY LOWER(TRIM(kota));

Kombinasi LOWER + TRIM adalah standar pembersihan sebelum GROUP BY atau JOIN. Tanpa ini, "Bandung" dan "bandung " dihitung sebagai dua kota berbeda.

PostgreSQL punya bonus: INITCAP, yang bikin huruf awal tiap kata jadi kapital.

SELECT INITCAP(LOWER(TRIM(nama_lengkap))) AS nama_rapi
FROM pelanggan_kotor;
-- 'siti rahayu' jadi 'Siti Rahayu'

7. SUBSTRING — potong sesuai posisi

SELECT SUBSTRING(kode_pelanggan FROM 6 FOR 3) AS kode_kota
FROM pelanggan_kotor;
-- 'CUST-JKT-2026-0001' jadi 'JKT'

Mulai dari karakter ke-6, ambil 3 karakter. Ingat: indeks SQL mulai dari 1, bukan 0. Ini beda dengan Python dan JavaScript, dan sumber salah hitung yang klasik.

Pembahasan lengkapnya ada di artikel SUBSTRING SQL.

8 & 9. LEFT dan RIGHT — potong dari ujung

SELECT
    LEFT(kode_pelanggan, 4)  AS prefix,     -- 'CUST'
    RIGHT(kode_pelanggan, 4) AS nomor_urut  -- '0001'
FROM pelanggan_kotor;

Lebih pendek dari SUBSTRING kalau kamu ngambil dari ujung. Di Oracle, LEFT dan RIGHT gak ada — kamu harus pakai SUBSTR dengan angka negatif.

10. REPLACE — ganti karakter massal

SELECT REPLACE(REPLACE(no_hp, '-', ''), ' ', '') AS hp_bersih
FROM pelanggan_kotor;
-- '0812-3456-7890' jadi '081234567890'

REPLACE cuma bisa ganti satu jenis karakter per panggilan, jadi kamu tumpuk buat bersihin beberapa karakter sekaligus. Tiga tumpukan itu batas nyaman — lebih dari itu, mendingan pakai regex.

Perhatiin: REPLACE peka huruf besar-kecil. REPLACE(kota, 'bandung', 'Bandung') gak bakal nyentuh "BANDUNG".

11. POSITION — cari letak karakter

SELECT email, POSITION('@' IN email) AS posisi_at
FROM pelanggan_kotor;
-- 'budi@tokoberkah.co.id' → 5

Sendirian, POSITION jarang berguna. Kombinasinya sama SUBSTRING yang bikin dia kuat — buat motong teks yang panjangnya beda-beda.

SELECT SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM pelanggan_kotor;
-- 'tokoberkah.co.id'

Di MySQL namanya LOCATE, di SQL Server CHARINDEX. Konsepnya sama, namanya beda.

12. SPLIT_PART — pecah teks di pemisah

SELECT
    SPLIT_PART(LOWER(email), '@', 2) AS domain,
    COUNT(*) AS jumlah
FROM pelanggan_kotor
GROUP BY SPLIT_PART(LOWER(email), '@', 2)
ORDER BY jumlah DESC;

Ini fungsi favorit aku buat analisa email. Pecah teks di karakter @, ambil bagian kedua. Selesai dalam satu fungsi — gak perlu POSITION plus SUBSTRING.

Cuma ada di PostgreSQL. MySQL punya SUBSTRING_INDEX(email, '@', -1). SQL Server punya STRING_SPLIT yang ngasih beberapa baris, bukan satu nilai.

Bonus: CONCAT dan LPAD

CONCAT gabungin kolom teks jadi satu. Detailnya di artikel CONCAT SQL.

LPAD nambahin karakter di depan sampai panjangnya pas:

SELECT LPAD(CAST(id AS VARCHAR), 5, '0') AS id_rapi
FROM pelanggan_kotor;
-- 7 jadi '00007'

Kepakai buat bikin nomor invoice atau kode produk yang panjangnya seragam.

Contoh kasus: pipeline pembersihan dalam satu query

Ini query yang aku pakai tiap kali dapat export pelanggan baru:

SELECT
    INITCAP(TRIM(nama_lengkap))                  AS nama,
    LOWER(TRIM(email))                           AS email,
    REPLACE(REPLACE(no_hp, '-', ''), ' ', '')    AS hp,
    INITCAP(LOWER(TRIM(kota)))                   AS kota,
    SPLIT_PART(LOWER(email), '@', 2)             AS domain
FROM pelanggan_kotor;

Lima fungsi, satu query, dan data yang tadinya berantakan jadi siap dipakai laporan.

Kalau datanya bakal dipakai terus-menerus, jangan berhenti di SELECT. Simpan hasil bersihnya:

UPDATE pelanggan_kotor
SET kota = INITCAP(LOWER(TRIM(kota)));

Sekali jalan, dan semua query di masa depan gak perlu bersihin lagi. Ini juga bikin index di kolom kota beneran kepakai.

Kesalahan umum

Nempelin fungsi string di WHERE. WHERE LOWER(kota) = 'bandung' bikin index kolom kota gak kepakai. Database terpaksa scan semua baris. Normalisasi datanya sekali di awal lebih murah daripada bayar biaya scan tiap query.

Nganggep nama fungsi sama di semua database. LENGTH vs LEN, POSITION vs CHARINDEX, SPLIT_PART vs SUBSTRING_INDEX. Cek dokumentasi resmi — daftar fungsi string PostgreSQL lumayan lengkap dan enak dibaca.

Lupa TRIM sebelum bandingin. Spasi siluman adalah penyebab nomor satu JOIN yang ngasih hasil kosong padahal datanya jelas-jelas ada.

FAQ

Apakah nama fungsi string sama di semua database?

Sebagian besar sama, sebagian beda. LENGTH di PostgreSQL dan MySQL, LEN di SQL Server. SPLIT_PART cuma di PostgreSQL; MySQL punya SUBSTRING_INDEX. Kalau query kamu harus jalan lintas database, cek dokumentasi masing-masing dulu.

Fungsi mana yang paling sering dipakai analis?

TRIM dan LOWER, jauh di atas yang lain. Data dari form, CSV, atau scraping hampir selalu punya spasi berlebih dan huruf campur aduk. Dua fungsi ini yang bikin 'Bandung', 'bandung ', dan 'BANDUNG' dihitung sebagai satu kota.

Apakah fungsi string bikin query lambat?

Di SELECT, kecil. Di WHERE atau JOIN pada kolom ber-index, iya — index-nya jadi gak kepakai. Normalisasi data sekali lewat UPDATE, atau bikin index di ekspresi hasil fungsinya.

Gimana cara ambil domain email di SQL?

PostgreSQL: SPLIT_PART(email, '@', 2). MySQL: SUBSTRING_INDEX(email, '@', -1). Kalau gak ada keduanya, gabung SUBSTRING dan POSITION. LOWER dulu biar Gmail.com dan gmail.com gak kehitung terpisah.

Penutup

Dari 12 fungsi di atas, empat yang bakal kamu pakai hampir tiap hari: TRIM, LOWER, REPLACE, SUBSTRING. Sisanya nongol pas kamu butuh.

Yang perlu kamu inget: bersihin data sekali di awal lebih murah daripada nempelin fungsi string di tiap query. Dan indeks SQL mulai dari 1, bukan 0.

Copy query di bagian sql_queries artikel ini, jalanin di database latihan kamu, dan lihat sendiri gimana data kotor jadi rapi dalam satu SELECT.

Lanjut ke SUBSTRING SQL kalau kamu mau dalemin cara motong teks berdasarkan posisi.

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

7 SQL Client Gratis Terbaik buat Analis Data (2026)
Tutorial SQL
10 Juli 2026•9 menit baca

7 SQL Client Gratis Terbaik buat Analis Data (2026)

Nggak perlu bayar buat nulis query. Ini 7 SQL client gratis yang beneran dipakai analis, plus kelebihan dan kekurangannya masing-masing.

BimaBima
SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim
Tutorial SQL
7 Juli 2026•9 menit baca

SQL Style Guide: Cara Nulis Query yang Enak Dibaca Tim

Sepuluh aturan SQL style guide yang bikin query kamu kebaca sama tim — dan sama kamu sendiri 6 bulan lagi. Lengkap dengan contoh sebelum-sesudah.

BimaBima
Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya
Tutorial SQL
4 Juli 2026•11 menit baca

Take-Home Test SQL Data Analyst: Contoh Soal + Cara Ngerjainnya

Contoh soal take-home test SQL yang beneran dipakai perusahaan, dikerjain step by step — dari baca soal, nulis query, sampai nyusun insight yang bikin recruiter nengok.

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.

Copyright © 2026 - All rights reserved

LINKS
SupportPricingDatasetBlogAffiliates
LEGAL
Terms of servicesPrivacy policy
Ngulik Data
DatasetLeaderboardBlogStore