Di Oracle, fungsi DECODE memungkinkan kita untuk menambahkan logika prosedural if-then-else ke kueri. Di blog ini, kami akan mencoba untuk mendapatkan pemahaman yang lengkap tentang fungsi DECODE dalam SQL. Kita akan mempelajari berbagai cara menggunakan DECODE, sintaksnya dan memahaminya dengan contoh. Tetap bersama kami sampai akhir blog.
Topik yang akan dibahas adalah:
- Apa itu fungsi DECODE dalam SQL?
- Sintaks untuk fungsi DECODE
- Contoh fungsi DECODE
Mari kita mulai satu per satu.
Apa itu fungsi DECODE dalam SQL?
Di Oracle, fungsi DECODE memungkinkan kita untuk menambahkan logika prosedural if-then-else ke kueri. DECODE membandingkan ekspresi untuk setiap nilai pencarian satu per satu. Jika ekspresi sama dengan pencarian, maka hasil yang sesuai dikembalikan oleh Oracle Database. Jika kecocokan tidak ditemukan, maka default dikembalikan. Jika default dihilangkan, maka Oracle mengembalikan null.
Jenis argumen dapat berupa:
- Jenis numerik (NUMBER, BINARY_FLOAT, atau BINARY_DOUBLE)
Jika pasangan hasil pencarian pertama adalah numerik, maka Oracle membandingkan semua ekspresi hasil pencarian dan expr pertama untuk menemukan argumen dengan prioritas numerik tertinggi, mengonversi argumen yang tersisa secara implisit ke tipe data tersebut, dan mengembalikan tipe data tertentu.
- Jenis karakter
Jika expr dan pencarian adalah data karakter, maka Oracle membandingkannya menggunakan semantik perbandingan non-empuk. expr, search, dan hasilnya dapat berupa tipe data CHAR, VARCHAR2, NCHAR, atau NVARCHAR2. String yang dikembalikan adalah tipe data VARCHAR2 dan dalam set karakter yang sama dengan parameter hasil pertama.
Oracle Database menggunakan evaluasi hubung singkat. Ini mengevaluasi nilai pencarian hanya sebelum membandingkannya dengan ekspresi daripada mengevaluasi semua nilai pencarian. Jika pencarian sebelumnya sama dengan ekspresi, evaluasi dihentikan.
Oracle mengonversi nilai expr dan pencarian ke tipe data dari nilai pencarian pertama sebelum perbandingan. Dan mengonversi nilai yang dikembalikan ke tipe data yang sama seperti hasil pertama.
Contoh: Jika hasil pertama memiliki tipe data CHAR atau jika hasil pertama adalah null, maka Oracle mengonversi nilai yang dikembalikan ke tipe data VARCHAR2.
Dua null dianggap setara oleh Oracle. Jika expr adalah null, maka Oracle mengembalikan NULL yang merupakan hasil dari pencarian pertama.
Jumlah maksimum komponen yang dapat ditampung dalam fungsi DECODE adalah 255. Ini termasuk argumen ekspresi, pencarian, dan hasil.
Fungsi DECODE dapat digunakan dalam versi Oracle atau PLSQL berikut:
Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i
Contoh dasar:
Dalam contoh berikut, fungsi Oracle DECODE() membandingkan argumen pertama dengan argumen kedua. Karena keduanya sama, fungsi mengembalikan argumen kedua yang merupakan string 'Satu'.
SELECT DECODE(1, 1, 'One') FROM dual;
Sintaks untuk fungsi DECODE adalah:
DECODE(expression , search , result [, search , result]… [, default(opsional)])
ekspresi
Nilai yang harus dibandingkan. Secara otomatis akan dikonversi ke tipe data dari nilai pencarian pertama sebelum membandingkan.
penelusuran
Nilai yang dibandingkan dengan ekspresi.
hasil
Nilai yang dikembalikan, jika ekspresi=pencarian.
bawaan
Jika tidak ada kecocokan, fungsi DECODE akan mengembalikan default dan jika default dihilangkan, maka fungsi akan mengembalikan NULL.
Contoh fungsi DECODE
- Fungsi DECODE dapat digunakan di Oracle/PLSQL sebagai berikut
SELECT bank_name, DECODE(bank_id, 001, 'SBI', 002, 'ICICI', 003, ‘Dena', 'Gateway') result FROM banks;
Pernyataan IF-THEN-ELSE yang setara untuk pernyataan DECODE() di atas:
IF bank_id = 001 THEN result := 'SBI'; ELSIF bank_id = 002 THEN result := 'ICICI'; ELSIF bank_id = 003 THEN result := 'Dena'; ELSE result := 'Gateway'; END IF;
Fungsi DECODE akan membandingkan setiap nilai bank_id, satu per satu.
- DECODE berfungsi untuk membandingkan dua tanggal (tanggal1 dan tanggal2), di mana, jika tanggal1> tanggal2, fungsi DECODE harus mengembalikan tanggal2. Jika tidak, fungsi DECODE akan mengembalikan tanggal1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)
Rumus di bawah ini sama dengan 0, jika date1 lebih besar dari date2:
(date1 - date2) - ABS(date1 - date2)
Contoh tanggal yang diilustrasikan di atas juga dapat dimodifikasi sebagai berikut:
DECODE(SIGN(date1-date2), 1, date2, date1)
- Pernyataan DECODE yang akan mengembalikan berikut ini:
Jika hours_of_work <1 maka kembalikan 0,04
Jika hours_of_work>=1 dan <5 maka kembalikan 0,04
Jika hours_of_work> 5 maka kembalikan 0,06
Di sini, Anda perlu membuat formula yang akan mengevaluasi satu angka untuk setiap rentang Anda.
SELECT emp_name, DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04, 1, 0.04, 0.06) as perc_value FROM employees;
Ini semua tentang fungsi DECODE, sekarang Anda harus memiliki gambaran yang jelas tentang cara kerjanya dan seberapa berguna fungsi ini. Sekarang, coba gunakan setiap kali logika IF-ELSE diperlukan saat mengerjakan SQL. Saya harap artikel ini membantu Anda dengan konsep pernyataan DECODE.
Jika Anda ingin mempelajari lebih lanjut tentang MySQL dan mengenal database relasional sumber terbuka ini, lihat Pelatihan Sertifikasi DBA MySQL kami yang dilengkapi dengan pelatihan langsung yang dipimpin instruktur dan pengalaman proyek kehidupan nyata. Pelatihan ini akan membantu Anda memahami MySQL secara mendalam dan membantu Anda menguasai subjek tersebut.
Ada pertanyaan untuk kami? Harap sebutkan di bagian komentar ”DECODE in SQL” dan saya akan menghubungi Anda kembali.