Ketika menampilkan tabel hasil query, kadang kita perlu memecah data dari sebuah kolom. MySQL menyediakan beberapa fungsi yang bisa digunakan untuk keperluan ini, seperti fungsi SUBSTRING, SUBSTR, MID, LEFT dan RIGHT. Kita akan membahas cara penggunaan kelima fungsi ini.
Cara Penggunaan Fungsi SUBSTRING, SUBSTR dan MID MySQL
MySQL meyediakan fungsi SUBSTRING untuk memotong string. Fungsi ini membutuhkan 2 argumen utama dan 1 argumen tambahan (opsional). Berikut format dasarnya:
SUBSTRING (nama_kolom, index_awal, jumlah_karakter)
- nama_kolom adalah nama kolom tabel yang akan diambil karakternya (sebagai sumber string)
- index_awal bisa diisi dengan angka yang berfungsi sebagai index awal karakter yang ingin diambil, dihitung dari index 1 pada karakter pertama, index 2 pada karakter kedua, dst. Apabila diinput dengan nilai negatif, index akan dihitung mulai dari akhir string.
- jumlah_karakter adalah argumen opsional yang jika tidak ditulis, fungsi SUBSTRING akan mengambil seluruh karakter hingga akhir string. Jika ditulis, maka ini berfungsi sebagai batasan jumlah karakter yang akan diambil.
Agar lebih mudah dipahami, langsung saja kita masuk ke praktek. Kali ini saya menggunakan kolom NIP dari tabel daftar_dosen:
mysql> SELECT NIP FROM daftar_dosen; +------------+ | NIP | +------------+ | 0160436012 | | 0260432002 | | 0275430005 | | 0480432066 | | 0576431001 | | 0770435006 | | 0869437003 | | 1080432007 | +------------+ 8 rows in set (0.00 sec) mysql> SELECT SUBSTRING(NIP, 4) FROM daftar_dosen; +-------------------+ | SUBSTRING(NIP, 4) | +-------------------+ | 0436012 | | 0432002 | | 5430005 | | 0432066 | | 6431001 | | 0435006 | | 9437003 | | 0432007 | +-------------------+ 8 rows in set (0.00 sec) mysql> SELECT SUBSTRING(NIP, 4, 3) FROM daftar_dosen; +----------------------+ | SUBSTRING(NIP, 4, 3) | +----------------------+ | 043 | | 043 | | 543 | | 043 | | 643 | | 043 | | 943 | | 043 | +----------------------+ 8 rows in set (0.00 sec) mysql> SELECT SUBSTRING(NIP, -4) FROM daftar_dosen; +--------------------+ | SUBSTRING(NIP, -4) | +--------------------+ | 6012 | | 2002 | | 0005 | | 2066 | | 1001 | | 5006 | | 7003 | | 2007 | +--------------------+ 8 rows in set (0.00 sec) mysql> SELECT SUBSTRING(NIP, -4, 3) FROM daftar_dosen; +-----------------------+ | SUBSTRING(NIP, -4, 3) | +-----------------------+ | 601 | | 200 | | 000 | | 206 | | 100 | | 500 | | 700 | | 200 | +-----------------------+ 8 rows in set (0.00 sec)
Dalam contoh diatas, saya menggunakan 4 kombinasi fungsi SUBSTRING:
- SELECT SUBSTRING(NIP, 4) FROM daftar_dosen: ambil seluruh karakter pada kolom daftar dosen_mulai dari index (huruf) ke-4 hingga akhir string.
- SELECT SUBSTRING(NIP, 4, 3) FROM daftar_dosen: ambil seluruh karakter pada kolom daftar_dosen mulai dari index (huruf) ke-4, dan 3 karakter berikutnya.
- SELECT SUBSTRING(NIP, -4) FROM daftar_dosen: ambil 4 karakter terakhir dari kolom daftar dosen.
- SELECT SUBSTRING(NIP, -4, 3) FROM daftar_dosen: ambil 4 karakter terakhir dari kolom daftar dosen, kecuali 1 huruf terakhir (4-3 = 1)
Dalam MySQL, fungsi SUBSTRING memiliki 2 alias: SUBSTR dan MID. Dengan kata lain, ketiga fungsi ini berfungsi sama:
mysql> SELECT SUBSTR(NIP, -4, 3) FROM daftar_dosen; +--------------------+ | SUBSTR(NIP, -4, 3) | +--------------------+ | 601 | | 200 | | 000 | | 206 | | 100 | | 500 | | 700 | | 200 | +--------------------+ 8 rows in set (0.00 sec) mysql> SELECT MID(NIP, -4, 3) FROM daftar_dosen; +-----------------+ | MID(NIP, -4, 3) | +-----------------+ | 601 | | 200 | | 000 | | 206 | | 100 | | 500 | | 700 | | 200 | +-----------------+ 8 rows in set (0.00 sec)
MySQL menyediakan berbagai nama untuk fungsi yang sama agar sesuai dengan standar bahasa SQL.
Cara Penggunaan Fungsi LEFT dan RIGHT MySQL
Fungsi LEFT dan RIGHT pada dasarnya merupakan bentuk sederhana dari fungsi SUBSTRING. Keduanya membutuhkan 2 argumen yaitu nama kolom tabel dan jumlah huruf yang ingin diambil.
Fungsi LEFT akan mengambil sejumlah karakter mulai dari kiri string, dan fungsi RIGHT akan mulai dari sisi kanan string.
Berikut contoh percobaannya menggunakan kolom NIP dari tabel nama_dosen:
mysql> SELECT NIP FROM daftar_dosen; +------------+ | NIP | +------------+ | 0160436012 | | 0260432002 | | 0275430005 | | 0480432066 | | 0576431001 | | 0770435006 | | 0869437003 | | 1080432007 | +------------+ 8 rows in set (0.00 sec) mysql> SELECT LEFT(NIP, 5) FROM daftar_dosen; +--------------+ | LEFT(NIP, 5) | +--------------+ | 01604 | | 02604 | | 02754 | | 04804 | | 05764 | | 07704 | | 08694 | | 10804 | +--------------+ 8 rows in set (0.00 sec) mysql> SELECT RIGHT(NIP, 5) FROM daftar_dosen; +---------------+ | RIGHT(NIP, 5) | +---------------+ | 36012 | | 32002 | | 30005 | | 32066 | | 31001 | | 35006 | | 37003 | | 32007 | +---------------+ 8 rows in set (0.00 sec)
Seperti yang terlihat, query SELECT LEFT(NIP, 5) FROM daftar_dosen akan menampilkan 5 karakter pertama dari kolom NIP, sedangkan query SELECT RIGHT(NIP, 5) FROM daftar_dosen akan mengambil 5 karakter terakhir dari kolom NIP.
Yang perlu diingat, fungsi LEFT dan RIGHT tidak mendukung angka negatif seperti fungsi SUBSTRING.
Query 'pemotongan' string yang kita pelajari disini cukup penting diketahui, terutama jika kita ingin menggunakan kolom yang terdiri dari kumpulan informasi. Misalkan untuk NIM mahasiswa, biasanya 2 digit pertama adalah tahun lahir, 2 digit berikutnya kode fakultas, dan 4 digit berikutnya no urut mahasiswa. Fungsi SUBSTRING bisa digunakan untuk memecah NIM ini untuk pemrosesan lebih lanjut.
kalau kita mau menggabungkan antara select max dan select substr ato left, mid, right itu bisa ga?
Yup bisa. Proses penggabungan 2 query seperti itu sering disebut sebagai subquery.
Kalo misalnya kita mau substr tp parameternya make koma jadi yang ada di depan koma yang pengen ditampilin, bisa gak? Mohon bantuannua
Untuk keperluan itu harus pakai regular expression, karena fungsi substr() hanya menerima inputan berupa posisi urutan karakter.
kalau mau ambil karakter ganjil saja dalam cell gmn caranya ya?
misal: 4C3C2121013C4C3C3C21212111111111012111111111012C menjadi : 432203433222111102111102
thanks before
Kalau yang seperti ini bisa menggunakan Regular Expression, dan akan lebih mudah jika di lakukan dari sisi programming (misalnya di PHP), kurang pas jika dibuat menggunakan query MySQL.
Semisal digunakan untuk menghapus apa bisa? contohnya seperti
DELETE LEFT (nama, 1) FROM data_mahasiswa. digunakan buat mengambil nama depan mahasiswa, kalau semisal tidak bisa mohon saran yang lebih tepatnya. Terimakasih
mau nanya mas kalau panjang karakternya berbeda beda bagaimana ya cara query substringnya? yang saya mau rapikan itu daftar email yang masih berantakan namanya (setelah dotcom itu masih ada lanjutannya dan yg setelah dotcom ini yang pengen saya hilangkan karakternya) tapi panjang email setiap orangnya kan berbeda ya mas, nah itu yg masih jadi kesulitan sampe sekarang😅🙏
Untuk keperluan seperti itu, bisa lanjut pakai regular expression. Tutorial dasarnya bisa ke sini: https://www.duniailkom.com/tutorial-belajar-mysql-pencarian-data-dari-tabel-mysql-dengan-regular-expression-regexp/
Mau tanya utk penggunaan substring (mid), bisa dibuat untuk menambah kolom baru gak ya? jadi di gabungin sama alter table gitu?