SINGLE-ROW FUNCTIONS
Obyektif :
Setelah menyelesaikan bahasan ini, mahasiswa dapat melakukan hal-hal berikut :
1. Menggambarkan berbagai tipe dari functions yang tersedia pada SQL.
2. Menggunakan character, number, dan date funtions pada statemen SELECT.
3. Menggambarkan kegunaan conversion functions.
Functions adalah fitur dari SQL yang dapat digunakan untuk melakukan hal-hal seperti:
• Melakukan perhitungan pada data
• Modifikasi item data yang bersifat individual
• Manipulasi output untuk kelompok baris
• Format tanggal dan nomor untuk tampilan
• Mengubah tipe data kolom
27
Gambar 4.2. Two Types of SQl Functions
Single-row functions digunakan untuk menggunakan data. Dapat juga menerima satu atau
lebih argumen dan menghasilkan satu nilai tiap baris yang dihasilkan query. Argumen dapat
berupa :
28
1. User-supplied constant.
2. Nilai variabel.
3. Nama kolom.
4. Ekspresi.
Pada sintaks :
function_name adalah nama fungsi.
column adalah nama kolom database.
expression adalah untai karakter atau ekspresi yang dikalkulasi.
arg1, arg2 adalah argumen yang akan digunakan oleh fungsi.
29
Single-row character functions menerima data karakter sebagai masukan dan dapat
menghasilkan nilai karakter dan bilangan. Fungsi character dapat dibagi menjadi :
• case conversion functions
• character manipulation functions
Menampilkan nomor pegawai, nama dan nomor departemen bagi pegawai Blake
Contoh di atas menampilkan nomor pegawai, nama dan nomor departemen bagi pegawai
BLAKE. Klausa WHERE pada sintaks SQL yang pertama merinci pada nama pegawai
‘blake’. Selama data dalam tabel EMP dalam keadaan uppercase, nama ‘blake’ tidak
menemukan kecocokan pada tabel EMP sehingga tidak ada baris yang ditampilkan.
Klausa WHERE pada sintaks yang kedua menspesifikasikan bahwa nama pegawai dalam
tabel EMP dibandingkan pada ‘blake’, yang sudah di uppercase. Selama kedua nama dalam
keadaan uppercase, maka ditemukan kecocokan dan satu baris ditampilkan.
30
Klausa WHERE dapat ditulis ulang dengan cara berikut untuk menampilkan hasil yang sama:
... WHERE ename = ‘BLAKE’
Nama yang ditampilkan pada output akan muncul sesuai dalam database. Untuk
menampilkan nama dengan huruf pertama kapital, gunakan fungsi INITCAP pada klausa
SELECT.
31
Menggunakan Fungsi ROUND
Fungsi ROUND membulatkan kolom, ekspresi atau nilai ke n desimal. Jika argumen kedua 0
atau hilang, nilai dibulatkan ke desimal nol. Jika argumen kedua 2, nilai dibulatkan ke dua
desimal. Sebaliknya, jika argumen kedua -2, nilai dibulatkan ke dua desimal ke kiri. Fungsi
ROUND juga dapat digunakan dengan date functions. Akan ada beberapa contoh dalam
pelajaran ini.
32
4.2.5. Bekerja dengan Date
1. Oracle menyimpan date pada format numerik internal : abad, tahun, bulan, tanggal, jam,
menit dan detik.
2. Format date adalah DD-MON-YY.
3. SYSDATE adalah fungsi yang menghasilkan tanggal dan waktu.
4. DUAL adalah tabel dummy yang digunakan untuk melihat SYSDATE.
Sysdate
SYSDATE adalah fungsi tanggal yang menghasilkan tanggal dan waktu sekarang.
Contohnya, menampilkan tanggal sekarang dengan memilih SYSDATE dari tabel.
Dual
Tabel DUAL dimiliki oleh pengguna SYS dan dapat diakses oleh semua pengguna. Berisi
satu kolom, DUMMY, dan satu baris dengan nilai X. Tabel DUAL sangat berguna jika ingin
menghasilkan nilai hanya sekali - , nilai konstanta, pseudocolumn, atau ekspresi yang tidak
diambil dari tabel data pengguna. Tabel DUAL umumnya digunakan bagi klausa sintaks
SELECT yang tidak lengkap, karena klausa SELECT dan FROM , dan beberapa perhitungan
tidak perlu dipilih dari tabel yang aktual.
Contoh
Tampilkan tanggal menggunakan tabel DUAL.
Aritmatika Date
Sejak database menyimpan tanggal sebagai angka, selain dapat melakukan perhitungan
menggunakan operator aritmatika seperti penambahan dan pengurangan, juga dapat
menambah dan mengurangi angka konstan seperti tanggal.
33
Tabel 4.1. Daftar Operasi Aritmatika Tanggal
Contoh di atas menunjukkan nama dan jumlah minggu bekerja bagi semua pegawai pada
departemen 10. Perintah SQL tersebut mengurangi tanggal sekarang (SYSDATE) dari
tanggal mereka mulai bekerja dan hasilnya dibagi 7 untuk menghasilkan jumlah minggu
seorang pegawai telah bekerja.
Fungsi Date
Fungsi date beroperasi pada tanggal Oracle. Semua fungsi date menghasilkan nilai dengan
tipedata DATE kecuali MONTHS_BETWEEN yang menghasilkan nilai numerik.
1. MONTHS_BETWEEN(date1, date2): Menemukan jumlah bulan antara date1 dan date2.
Hasilnya dapat positif atau negatif. Jika date1 kemudian daripada date2, hasilnya positif;
jika date1 lebih dulu daripada date2, hasilnya negatif. Bagian yang tidak integer dari hasil
menunjukkan bagian bulan.
2. ADD_MONTHS(date, n) : Menambahkan sejumlah n bulan ke tanggal. Nilai n harus
integer dan dapat negatif.
3. NEXT_DAY(date, ‘char’) : Menemukan tanggal berikut dari tanggal yang ditentukan
4. LAST_DAY(date) : Menemukan tanggal dari hari terakhir dari bulan yang berisi
date.
5. ROUND(date[,’fmt’]) : Menghasilkan date yang dibulatkan ke unit yang ditentukan
oleh model format fmt. Jika model format fmt diabaikan, date dibulatkan ke hari terdekat.
34
6. TRUNC(date[,’fmt’]) : Menghasilkan date dengan bagian waktu dari hari yang
dipotong ke unit yang ditentukan olah model format fmt. Jika model format fmt diabaikan,
date dipotong ke hari terdekat.
Contoh :
Semua pegawai yang bekerja kurang dari 200 bulan, tampilkan nomor pegawai, tanggal
kontrak, jumlah bulan bekerja, tanggal review 6 bulan, Jum'at pertama, dan hari terakhir pada
bulan dikontrak.
Fungsi ROUND dan TRUNC dapat digunakan untuk nilai nomor dan tanggal. Ketika
digunakan dengan tanggal, fungsi ini membulatkan atau memotong ke model format yang
telah ditentukan. Oleh karena itu, dapat dilakukan pembulatan tanggal ke tahun atau bulan
terdekat.
Contoh
Bandingkan tanggal kontrak semua pegawai yang mulai tahun 1982. Tampilkan nomor
pegawai, tanggal kontrak, dan bulan mulai menggunakan fungsi ROUND dan TRUNC.
SQL> SELECT empno, hiredate, ROUND(hiredate, 'MONTH'),
TRUNC(hiredate, 'MONTH')
3 FROM emp
5 WHERE hiredate like '%1982';
35
4.2.6. Fungsi Conversion
Perubahan tipedata dapat dilakukan secara implisit oleh Oracle Server atau secara eksplisit
oleh pengguna. Perubahan eksplisit tipedata dilakukan dengan menggunakan fungsi
conversion. Fungsi conversion mengubah nilai dari satu tipedata ke lainnya. Umumnya,
bentuk nama fungsi mengikuti ketentuan datatype TO datatype. Tipedata pertama merupakan
tipedata masukan; tipedata terakhir merupakan keluaran.
Penugasan berhasil jika Oracle Server dapat mengubah nilai tipe data yang digunakan pada
penugasan ke sasaran penugasan.
Dari Ke
VARCHAR2 atau VAR NUMBER
VARCHAR2 atau VAR DATE
Secara umum, Oracle Server menggunakan aturan bagi ekspresi sewaktu perubahan tipedata
dibutuhkan pada tempat yang tidak tercakup aturan penugasan perubahan.
36
Catatan : perubahan CHAR ke NUMBER berhasil hanya jika untai karakter mewakili
bilangan bukan alfabet. Perubahan CHAR ke DATE berhasil hanya jika untai karakter
memiliki format DD-MON-YY.
Tabel 4.4. Fungsi untuk mengubah nilai dari satu tipedata ke lainnya.
Fungsi Kegunaan
TO_CHAR(number|d Mengubah nilai bilangan atau tanggal ke untai
ate,[fmt],[nlsparams]) karakter VARCHAR2 dengan model format fmt.
Perubahan bilangan :
Parameter nlsparams menetapkan karakter berikut,
yang dihasilkan elemen format bilangan.
• Decimal character
• Group separator
• Local currency symbol
• International currency symbol
Jika nlsparams atau parameter lain diabaikan, fungsi
ini menggunakan nilai parameter awal sesi.
Perubahan tanggal :
Parameter nlsparams menetapkan bahasa pada nama
bulan dan hari dan singkatan yang dihasilkan. Jika
parameter diabaikan, fungsi ini menggunakan bahasa
tanggal awal sesi.
TO_NUMBER(char,[f Mengubah untai karakter berisi angka ke bilangan
mt],[nlsparams]) pada format yang ditentukan oleh model format
opsional fmt.
Parameter nlsparams memiliki kegunaan yang sama
pada fungsi ini seperti pada fungsi TO_CHAR untuk
perubahan bilangan.
TO_DATE(char,[fmt], Mengubah untai karakter yang mewakili tanggal ke
[nlsparams) nilai tanggal menurut penetapan fmt. Jika fmt
diabaikan, formatnya DD-MON-YY
Parameter nlsparams memiliki kegunaan yang sama
pada fungsi ini seperti pada fungsi TO_CHAR untuk
perubahan tanggal.
TO_CHAR(date, 'fmt')
37
Menampilkan Tanggal Pada Format Tertentu
Sebelumnya, semua tanggal Oracle ditampilkan pada format DD-MON-YY. Fungsi
TO_CHAR mengizinkan untuk mengubah tanggal dari format awal ke format yang
ditentukan.
Panduan
1. Model format harus diapit dengan tanda kutip tunggal dan case sensitive.
2. Model format dapat berupa sembarang elemen format tanggal yang valid. Pastikan untuk
memisahkan tanggal dari model format dengan koma.
3. Nama hari dan bulan secara otomatis diisi dengan kosong .
4. Untuk menghapus isian kosong atau menyembunyikan nol di depan, gunakan mode isian
elemen fm.
5. Mengatur lebar tampilan dari karakter yang dihasilkan dengan perintah SQL*Plus
COLUMN.
6. Lebar kolom yang dihasilkan defaultnya 80 karakter.
38
DY Nama hari, singkatan tiga huruf
J Hari Julia, jumlah hari sejak 31 Desember 4713 BC
Gunakan format yang ada pada tabel berikut untuk menampilkan informasi waktu dan
merubah angka ke ejaan bilangan.
Contoh
SQL> SELECT ename,
2 TO_CHAR(hiredate, 'fmDdspth "of" Month YYY
fmHH:MT:SS AM')
3 HIREDATE
4 FROM emp;
39
Fungsi TO_CHAR dengan Bilangan
TO_CHAR(number, 'fmt')
Ketika bekerja dengan bilangan seperti untai karakter, sudah seharusnya mengubah bilangan
tersebut ke tipedata karakter menggunakan fungsi TO_CHAR, yang menterjemahkan nilai
NUMBER ke VARCHAR2.
40
Pedoman
• Oracle Server menampilan untai dari tanda pagar (#) pada tempat semua bilangan yang
digitnya melebihi jumlah digit yang disediakan pada model format.
• Oracle Server membulatkan nilai desimal yang disimpan ke jumlah tempat desimal
yang disediakan pada model format.
TO_NUMBER(char[,'fmt'])
TO_DATE(char[,'fmt'])
Contoh
SQL> SELECT ename, hiredate
2 FROM emp
3 WHERE hiredate=TO_DATE(February 22, 1981', Month dd,
YYY');
41
Format tanggal RR hampir sama dengan elemen YY, tapi dia mengizinkan untuk menetapkan
abad yang berbeda.
Fungsi NVL
Mengubah null ke nilai aktual
• Tipedata yang dapat digunakan adalah tanggal, karakter dan bilangan.
• Tipedata harus cocok
- NVL(comm,0)
- NVL(hiredate,'01-JAN-97')
- NVL(job,'No Job Yet')
Untuk mengubah nilai null ke nilai aktual, gunakan fungsi NVL.
Sintaksnya
NVL (expr1,expr2)
Dimana :
expr1 adalah nilai awal atau ekspresi yang mungkin mengandung null
expr2 adalah nilai target untuk perubahan null
Fungsi NVL digunakan untuk mengubah sembarang tipedata, tetapi nilai yang dihasilkan
selalu sama dengan tipedata expr1.
Untuk menghitung kompensasi tahunan semua pegawai, perlu mengalikan gaji bulanan
dengan 12 dan kemudian menambahkan komisi.
42
DECODE(col/expression, search1, result1
[, search2, result2, …,]
[, default])
Cara fungsi DECODE menguraikan kode ekspresi mirip dengan logika IF-THEN-ELSE yang
digunakan di bermacam bahasa. Fungsi DECODE menguraikan kode expression setelah
membandingkannya ke tiap nilai search. Jika ekspresi sama dengan search, dihasilkan result.
Pada statemen SQL di atas, kode nilai JOB diuraikan. Jika JOB adalah ANALYST, gaji naik
10%; jika JOB adalah CLERK, gaji naik 15%; jika JOB addalah MANAGER, gaji naik 20%.
Bagi semua pekerjaan lain, tidak ada kenaikan gaji.
Fungsi Nesting
Contoh di bawah menunjukkan kepala perusahaan, yang bukan manajer. Evaluasi statemen
SQL melibatkan 2 langkah :
4.2.6.1. Nilai fungsi di dalam untuk mengubah nilai bilangan ke untai karakter.
- Result1 = TO_CHAR(mgr)
4.2.6.2. Nilai fungsi di luar untuk mengganti nilai null dengan untai teks.
- NVL(Result1, ‘No Manager’)
43
Semua ekspresi menjadi kepala kolom karena tidak ada alias kolom yang diberikan.
Contoh :
Tampilkan tanggal Jum’at berikutnya , yaitu enam bulan dari tanggal kontrak. Tanggal yang
dihasilkan harus menunjukkan Jum’at, 12 Maret 1982. Urutkan hasil berdasar tanggal
kontrak.
44