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:
[email protected] |
[email protected] |
[email protected] |
[email protected] |
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 | |
---|---|
[email protected] | jake99@ |
[email protected] | tamarab |
[email protected] | notine@ |
[email protected] | 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 | |
---|---|
[email protected] | @gmail.com |
[email protected] | @zoho.com |
[email protected] | @yahoo.fr |
[email protected] | @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 | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
Bagian POSITION('.' IN email) - POSITION('@' IN email)
cukup hitung panjang substring.