Plugin polar_utility memperluas PolarDB for Oracle dengan fungsi tambahan untuk interval dan konversi data. Instal plugin ini sekali per database, lalu panggil fungsinya langsung dalam SQL.
Instal dan hapus plugin
Instal plugin:
CREATE EXTENSION polar_utility;Hapus plugin:
DROP EXTENSION polar_utility;Referensi fungsi
polar_utility menyediakan dua kelompok fungsi:
Fungsi interval — mengonversi nilai interval menjadi jumlah hari dalam bentuk numerik, lalu menerapkan transformasi:
| Fungsi | Nilai Kembali | Deskripsi | Contoh singkat |
|---|---|---|---|
to_number(interval) | numeric | Jumlah hari sebagai angka desimal | to_number(interval '2.1 day') → 2.1 |
trunc(interval) | numeric | Jumlah hari, hanya bagian bilangan bulatnya | trunc(interval '2.1 day') → 2 |
abs(interval) | numeric | Jumlah hari absolut | abs(interval '-1 day') → 1 |
to_char(interval) | text | Jumlah hari sebagai string | to_char(interval '2.1 day') → '2.1' |
Fungsi konversi — mengurai atau meng-encode ulang nilai:
| Fungsi | Mengembalikan | Deskripsi | Contoh singkat |
|---|---|---|---|
to_date(numeric, character varying) | date | Mengurai string tanggal numerik menggunakan format mask | to_date('20200811','yyyymmddhh24miss') → Tue Aug 11 00:00:00 2020 |
to_date(timestamp without time zone) | date | Mengubah timestamp menjadi nilai tanggal | to_date('11-AUG-20 03:16:09.089308'::timestamp) → Tue Aug 11 03:16:09.089308 2020 |
mod(text, text) | numeric | Operasi modulo pada nilai teks (dikonversi ke numerik terlebih dahulu) | mod('10'::text, '2'::text) → 0 |
convert(text, text) | text | Meng-encode ulang string ke encoding yang ditentukan | convert('RAM is the new disk.', 'utf8') → 'RAM is the new disk.' |
Siapkan data uji
Contoh berikut menggunakan tabel uji yang sama. Jalankan pernyataan berikut sekali untuk membuatnya:
CREATE TABLE polar_test_interval_func(a interval);
INSERT INTO polar_test_interval_func
VALUES (interval '1.1 hour'),
(interval '2.1 day'),
(interval '3.1 month'),
(interval '4.3 year'),
(('11-AUG-20 03:16:09.089308'::timestamp - 1) - '11-AUG-20 03:16:09.089308'::timestamp),
(('11-AUG-20 03:16:09.089308'::timestamp + 3) - '11-AUG-20 03:16:09.089308'::timestamp);Fungsi interval
to_number(interval)
Mengonversi nilai interval menjadi jumlah hari ekuivalennya, dikembalikan sebagai numeric.
SELECT to_number(a) FROM polar_test_interval_func;Hasil:
to_number
-------------------------
0.04583333333333333333
2.1000000000000000
93.0000000000000000
1551.0000000000000000
-1.00000000000000000000
3.0000000000000000
(6 rows)trunc(interval)
Mengonversi nilai interval menjadi jumlah hari ekuivalennya, lalu membuang bagian pecahan dan mengembalikan bagian bilangan bulat sebagai numeric.
SELECT trunc(a) FROM polar_test_interval_func;Hasil:
trunc
-------
0
2
93
1551
-1
3
(6 rows)abs(interval)
Mengonversi nilai interval menjadi jumlah hari ekuivalennya, lalu mengembalikan nilai absolutnya sebagai numeric.
SELECT abs(a) FROM polar_test_interval_func;Hasil:
abs
------------------------
0.04583333333333333333
2.1000000000000000
93.0000000000000000
1551.0000000000000000
1.00000000000000000000
3.0000000000000000
(6 rows)to_char(interval)
Mengonversi nilai interval menjadi jumlah hari ekuivalennya, lalu mengembalikan angka tersebut sebagai string text.
SELECT to_char(a) FROM polar_test_interval_func;Hasil:
to_char
-------------------------
0.04583333333333333333
2.1000000000000000
93.0000000000000000
1551.0000000000000000
-1.00000000000000000000
3.0000000000000000
(6 rows)Fungsi konversi
to_date(numeric, character varying)
Mengonversi string tanggal numerik menjadi nilai tanggal menggunakan format mask yang ditentukan.
SELECT to_date('20200811','yyyymmddhh24miss');Hasil:
to_date
--------------------------
Tue Aug 11 00:00:00 2020
(1 row)to_date(timestamp without time zone)
Menerima nilai timestamp dan mengembalikan nilai tanggal.
SELECT to_date('11-AUG-20 03:16:09.089308'::timestamp);Hasil:
to_date
---------------------------------
Tue Aug 11 03:16:09.089308 2020
(1 row)mod(text, text)
Menjalankan operasi modulo pada dua nilai text. Nilai-nilai tersebut di-cast ke numeric sebelum perhitungan dilakukan.
SELECT mod('10'::text, '2'::text);Hasil:
mod
-----
0
(1 row)convert(text, text)
Meng-encode ulang string ke encoding target yang ditentukan dalam argumen kedua.
SELECT convert('RAM is the new disk.', 'utf8');Hasil:
convert
----------------------
RAM is the new disk.
(1 row)