Masalah:
Cara Mengekstrak Substring Dari String di PostgreSQL/MySQL
Contoh 1:
Di emails tabel, ada kolom email. Anda ingin menampilkan tujuh karakter pertama dari setiap email.
Tabelnya terlihat seperti ini:
| jake99@gmail.com |
| tamarablack@zoho.com |
| notine@yahoo.fr |
| jessica1995@onet.pl |
Solusi 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Sintaks lain:
SELECT email, SUBSTRING(email FROM 1 FOR 7) AS substring FROM emails;
Hasilnya adalah:
| substring | |
|---|---|
| jake99@gmail.com | jake99@ |
| tamarablack@zoho.com | tamarab |
| notine@yahoo.fr | notine@ |
| jessica1995@onet.pl | jessica |
Diskusi:
Gunakan SUBSTRING() fungsi. Argumen pertama adalah string atau nama kolom. Argumen kedua adalah indeks karakter di mana substring harus dimulai. Argumen ketiga adalah panjang substring.
Hati-Hati! Tidak seperti di beberapa bahasa pemrograman lain, indeks dimulai dari 1 , bukan 0. Ini berarti karakter pertama memiliki indeks 1, karakter kedua memiliki indeks 2, dst.
SUBSTRING(email, 1, 7) akan mengembalikan substring dari nilai-nilai di kolom email yang dimulai pada awal string (karakter pertama) dan pergi untuk tujuh karakter. Notasi lainnya, SUBSTRING(email FROM 1 FOR 7) , melakukan hal yang sama persis. Argumen setelah FROM adalah indeks awal, dan argumen setelah FOR adalah panjang substring.
Argumen ketiga dari SUBSTRING() fungsi adalah opsional. Jika Anda menghilangkannya, Anda akan mendapatkan substring yang dimulai pada indeks dalam argumen kedua dan berlanjut hingga akhir string. SUBSTRING(email, 1) akan mengembalikan seluruh string, seperti halnya SUBSTRING(email FROM 1) .
Contoh 2:
Anda ingin menampilkan substring antara indeks 2 dan 6 (inklusif).
Solusi 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Sintaks lain:
SELECT
email,
SUBSTRING(email FROM POSITION('@' IN email)) AS substring
FROM emails;
Hasilnya adalah:
| substring | |
|---|---|
| jake99@gmail.com | @gmail.com |
| tamarablack@zoho.com | @zoho.com |
| notine@yahoo.fr | @yahoo.fr |
| jessica1995@onet.pl | @onet.pl |
Diskusi:
Anda menggunakan SUBSTRING() fungsi seperti pada contoh sebelumnya. Kali ini, Anda sedang mencari karakter tertentu yang posisinya dapat bervariasi dari baris ke baris. Untuk menemukan indeks karakter tertentu, Anda dapat menggunakan POSITION(character IN column) fungsi, di mana karakter adalah karakter spesifik tempat Anda ingin memulai substring (di sini, @ ) . Kolom argumen adalah column dari mana Anda ingin mengambil substring; itu juga bisa berupa string literal.
Jika Anda ingin substring berjalan sampai akhir string asli, argumen ketiga di SUBSTRING() fungsi (atau FOR argumen) tidak diperlukan. Jika tidak, itu harus berupa panjang substring, atau Anda dapat menghitungnya menggunakan POSITION() fungsi. Anda mungkin juga ingin mengambil substring yang tidak berakhir di akhir string tetapi pada beberapa karakter tertentu, misalnya, sebelum '.'. Ini contohnya:
SELECT
email,
SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;
Sintaks lain:
SELECT
email,
SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;
Hasil dari query ini adalah:
| substring | |
|---|---|
| jake99@gmail.com | @gmail |
| tamarablack@zoho.com | @zoho |
| notine@yahoo.fr | @yahoo |
| jessica1995@onet.pl | @onet |
Bagian POSITION('.' IN email) - POSITION('@' IN email) cukup hitung panjang substring.