All Products
Search
Document Center

PolarDB:ROUND

Last Updated:Mar 28, 2026

ROUND mengembalikan nilai tanggal yang dibulatkan ke satuan yang ditentukan oleh pola format.

Tanpa pola format, perilaku fungsi ini bergantung pada tipe input:

  • DATE atau TIMESTAMP: dibulatkan ke hari terdekat.

  • INTERVAL: mengekstraksi bulan dan hari, lalu mengembalikan jumlah total hari dengan asumsi 30 hari per bulan.

Pola format

Pola formatSatuan pembulatan
CC, SCCAbad — dibulatkan ke 1 Januari abad terdekat. Dibulatkan ke bawah jika dua digit terakhir tahun ≤ 50; dibulatkan ke atas ke abad berikutnya jika ≥ 51.
SYYY, YYYY, YEAR, SYEAR, YYY, YY, YTahun — dibulatkan ke 1 Januari tahun terdekat. Dibulatkan ke bawah pada 30 Juni atau lebih awal; dibulatkan ke atas pada 1 Juli atau lebih akhir.
IYYY, IYY, IY, ITahun ISO — dibulatkan ke awal tahun ISO terdekat. Dibulatkan ke bawah pada 30 Juni atau lebih awal; dibulatkan ke atas pada 1 Juli atau lebih akhir.
QKuartal — dibulatkan ke hari pertama kuartal terdekat. Dibulatkan ke bawah pada atau sebelum tanggal 15 bulan kedua kuartal; dibulatkan ke atas pada tanggal 16 atau lebih akhir.
MONTH, MON, MM, RMBulan — dibulatkan ke hari pertama bulan terdekat. Dibulatkan ke bawah pada tanggal 15 atau lebih awal; dibulatkan ke atas pada tanggal 16 atau lebih akhir.
WWMinggu — dibulatkan ke hari yang sama dalam seminggu seperti hari pertama tahun tersebut.
IWMinggu ISO — dibulatkan ke Senin terdekat (hari pertama minggu ISO).
WMinggu — dibulatkan ke hari yang sama dalam seminggu seperti hari pertama bulan tersebut.
DDD, DD, JHari — dibulatkan ke hari terdekat.
DAY, DY, DAwal minggu — dibulatkan ke Minggu terdekat.
HH, HH12, HH24Jam — dibulatkan ke jam terdekat.
MIMenit — dibulatkan ke menit terdekat.
Catatan

Setiap tahun ISO dimulai pada Senin pertama tahun tersebut. Minggu ISO pertama berisi minimal empat hari dari tahun baru, sehingga tahun ISO dapat dimulai pada Desember tahun sebelumnya.

Contoh

Bulatkan ke abad terdekat

1950 berada di paruh pertama abad ke-20 (dua digit terakhir ≤ 50), sehingga dibulatkan mundur ke 1901. 1951 berada setelah titik tengah (dua digit terakhir > 50), sehingga dibulatkan maju ke 2001.

SELECT TO_CHAR(ROUND(TO_DATE('1950','YYYY'),'CC'),'DD-MON-YYYY') "Century" FROM DUAL;

   Century
-------------
 01-JAN-1901
(1 row)

SELECT TO_CHAR(ROUND(TO_DATE('1951','YYYY'),'CC'),'DD-MON-YYYY') "Century" FROM DUAL;

   Century
-------------
 01-JAN-2001
(1 row)

Bulatkan ke tahun terdekat

Tanggal pada atau sebelum 30 Juni dibulatkan ke bawah ke 1 Januari tahun berjalan. Tanggal pada atau setelah 1 Juli dibulatkan ke atas ke 1 Januari tahun berikutnya.

SELECT TO_CHAR(ROUND(TO_DATE('30-JUN-1999','DD-MON-YYYY'),'Y'),'DD-MON-YYYY') "Year" FROM DUAL;

    Year
-------------
 01-JAN-1999
(1 row)

SELECT TO_CHAR(ROUND(TO_DATE('01-JUL-1999','DD-MON-YYYY'),'Y'),'DD-MON-YYYY') "Year" FROM DUAL;

    Year
-------------
 01-JAN-2000
(1 row)

Bulatkan ke tahun ISO terdekat

Tahun ISO untuk 2004 dimulai pada 29 Desember 2003. Tahun ISO untuk 2005 dimulai pada 3 Januari 2005. 30 Juni 2004 lebih dekat ke awal tahun ISO 2004; 1 Juli 2004 lebih dekat ke awal tahun ISO 2005.

SELECT TO_CHAR(ROUND(TO_DATE('30-JUN-2004','DD-MON-YYYY'),'IYYY'),'DD-MON-YYYY') "ISO Year" FROM DUAL;

  ISO Year
-------------
 29-DEC-2003
(1 row)

SELECT TO_CHAR(ROUND(TO_DATE('01-JUL-2004','DD-MON-YYYY'),'IYYY'),'DD-MON-YYYY') "ISO Year" FROM DUAL;

  ISO Year
-------------
 03-JAN-2005
(1 row)

Bulatkan ke kuartal terdekat

Februari adalah bulan kedua Q1. Tanggal pada atau sebelum 15 Februari dibulatkan mundur ke 1 Januari; tanggal pada atau setelah 16 Februari dibulatkan maju ke 1 April.

SELECT ROUND(TO_DATE('15-FEB-07','DD-MON-YY'),'Q') "Quarter" FROM DUAL;

      Quarter
--------------------
 01-JAN-07 00:00:00
(1 row)

SELECT ROUND(TO_DATE('16-FEB-07','DD-MON-YY'),'Q') "Quarter" FROM DUAL;

      Quarter
--------------------
 01-APR-07 00:00:00
(1 row)

Bulatkan ke bulan terdekat

Tanggal pada atau sebelum tanggal 15 dibulatkan ke hari pertama bulan berjalan; tanggal pada atau setelah tanggal 16 dibulatkan ke hari pertama bulan berikutnya.

SELECT ROUND(TO_DATE('15-DEC-07','DD-MON-YY'),'MONTH') "Month" FROM DUAL;

       Month
--------------------
 01-DEC-07 00:00:00
(1 row)

SELECT ROUND(TO_DATE('16-DEC-07','DD-MON-YY'),'MONTH') "Month" FROM DUAL;

       Month
--------------------
 01-JAN-08 00:00:00
(1 row)

Bulatkan ke minggu terdekat (WW)

WW dibulatkan ke hari yang sama dalam seminggu seperti 1 Januari tahun yang diberikan. Karena 1 Januari 2007 jatuh pada hari Senin, semua hasil berupa hari Senin. 18 Januari lebih dekat ke Senin, 15 Januari; 19 Januari lebih dekat ke Senin, 22 Januari.

SELECT ROUND(TO_DATE('18-JAN-07','DD-MON-YY'),'WW') "Week" FROM DUAL;

        Week
--------------------
 15-JAN-07 00:00:00
(1 row)

SELECT ROUND(TO_DATE('19-JAN-07','DD-MON-YY'),'WW') "Week" FROM DUAL;

        Week
--------------------
 22-JAN-07 00:00:00
(1 row)

Bulatkan ke minggu ISO terdekat (IW)

IW dibulatkan ke Senin terdekat. 1 Januari 2004 paling dekat dengan Senin, 29 Desember 2003; 2 Januari 2004 paling dekat dengan Senin, 5 Januari 2004.

SELECT ROUND(TO_DATE('01-JAN-04','DD-MON-YY'),'IW') "ISO Week" FROM DUAL;

      ISO Week
--------------------
 29-DEC-03 00:00:00
(1 row)

SELECT ROUND(TO_DATE('02-JAN-04','DD-MON-YY'),'IW') "ISO Week" FROM DUAL;

      ISO Week
--------------------
 05-JAN-04 00:00:00
(1 row)

Bulatkan ke minggu terdekat (W)

W dibulatkan ke hari yang sama dalam seminggu seperti hari pertama bulan tersebut. Karena 1 Maret 2007 adalah hari Kamis, semua hasil berupa hari Kamis. 5 Maret lebih dekat ke Kamis, 8 Maret; 4 Maret lebih dekat ke Kamis, 1 Maret.

SELECT ROUND(TO_DATE('05-MAR-07','DD-MON-YY'),'W') "Week" FROM DUAL;

        Week
--------------------
 08-MAR-07 00:00:00
(1 row)

SELECT ROUND(TO_DATE('04-MAR-07','DD-MON-YY'),'W') "Week" FROM DUAL;

        Week
--------------------
 01-MAR-07 00:00:00
(1 row)

Bulatkan ke hari terdekat

Waktu sebelum siang (12.00.00) dibulatkan mundur ke hari berjalan; waktu pada atau setelah siang dibulatkan maju ke hari berikutnya.

SELECT ROUND(TO_DATE('04-AUG-07 11:59:59 AM','DD-MON-YY HH:MI:SS AM'),'J') "Day" FROM DUAL;

        Day
--------------------
 04-AUG-07 00:00:00
(1 row)

SELECT ROUND(TO_DATE('04-AUG-07 12:00:00 PM','DD-MON-YY HH:MI:SS AM'),'J') "Day" FROM DUAL;

        Day
--------------------
 05-AUG-07 00:00:00
(1 row)

Bulatkan ke Minggu terdekat

DAY dibulatkan ke Minggu terdekat. 8 Agustus 2007 adalah hari Rabu—lebih dekat ke Minggu, 5 Agustus. 9 Agustus 2007 adalah hari Kamis—lebih dekat ke Minggu, 12 Agustus.

SELECT ROUND(TO_DATE('08-AUG-07','DD-MON-YY'),'DAY') "Day of Week" FROM DUAL;

    Day of Week
--------------------
 05-AUG-07 00:00:00
(1 row)

SELECT ROUND(TO_DATE('09-AUG-07','DD-MON-YY'),'DAY') "Day of Week" FROM DUAL;

    Day of Week
--------------------
 12-AUG-07 00:00:00
(1 row)

Bulatkan ke jam terdekat

Waktu dengan 29 menit atau kurang dibulatkan mundur ke jam berjalan; waktu dengan 30 menit atau lebih dibulatkan maju ke jam berikutnya.

SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:29','DD-MON-YY HH:MI'),'HH'),'DD-MON-YY HH24:MI:SS') "Hour" FROM DUAL;

        Hour
--------------------
 09-AUG-07 08:00:00
(1 row)

SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30','DD-MON-YY HH:MI'),'HH'),'DD-MON-YY HH24:MI:SS') "Hour" FROM DUAL;

        Hour
--------------------
 09-AUG-07 09:00:00
(1 row)

Bulatkan ke menit terdekat

Detik 0–29 dibulatkan mundur ke menit berjalan; detik 30–59 dibulatkan maju ke menit berikutnya.

SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30:29','DD-MON-YY HH:MI:SS'),'MI'),'DD-MON-YY HH24:MI:SS') "Minute" FROM DUAL;

       Minute
--------------------
 09-AUG-07 08:30:00
(1 row)

SELECT TO_CHAR(ROUND(TO_DATE('09-AUG-07 08:30:30','DD-MON-YY HH:MI:SS'),'MI'),'DD-MON-YY HH24:MI:SS') "Minute" FROM DUAL;

       Minute
--------------------
 09-AUG-07 08:31:00
(1 row)

Bulatkan nilai INTERVAL

Tanpa pola format, ROUND pada nilai INTERVAL mengonversi interval menjadi jumlah total hari, dengan asumsi 30 hari per bulan.

SELECT ROUND(TIMESTAMP '2020-10-10 10:22:22' - TIMESTAMP '2020-10-05 12:22:22');
 round
-------
     4
(1 row)

SELECT ROUND(INTERVAL '1 year 13 months 3 days');
 round
-------
   753
(1 row)

Lihat juga

  • TRUNC — memotong nilai tanggal ke satuan yang ditentukan oleh pola format. Menggunakan pola format yang sama seperti ROUND.