Di Oracle, ROUND(date)
fungsi mengembalikan tanggal yang dibulatkan ke unit tanggal yang ditentukan.
Secara default, ini membulatkan tanggal ke hari terdekat, tetapi Anda dapat memberikan argumen opsional yang menentukan unit alternatif untuk digunakan.
Oracle juga memiliki ROUND(number)
sintaks, yang digunakan pada nomor. Artikel ini semata-mata tentang ROUND(date)
sintaks, yang digunakan pada tanggal.
Sintaks
Sintaksnya seperti ini:
ROUND(date [, fmt ])
Dimana date
harus diselesaikan hingga DATE
nilai, dan fmt
adalah model format opsional yang menentukan unit untuk membulatkan date
ke. Model format dapat berupa model format apa pun yang didukung untuk TRUNC(date)
dan ROUND(date)
fungsi.
Contoh
Ini contohnya:
SELECT
ROUND(TO_DATE('2030-12-31 12:30:45', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL;
Hasil:
01-JAN-31
Dalam hal ini, porsi waktunya adalah lewat tengah hari, dan tanggal dibulatkan ke hari berikutnya (yang kebetulan juga bulan dan tahun berikutnya).
Itu dibulatkan ke hari karena itulah unit default untuk dibulatkan, dan kami tidak secara eksplisit menentukan unit yang berbeda.
Inilah yang terjadi jika saya mengurangi porsi waktu menjadi sebelum tengah hari:
SELECT
ROUND(TO_DATE('2030-12-31 11:59:59', 'YYYY-MM-DD HH24:MI:SS'))
FROM DUAL;
Hasil:
31-DEC-30
Kali ini dibulatkan ke hari yang sama.
Perhatikan bahwa format tanggal yang dikembalikan bergantung pada nilai NLS_DATE_FORMAT
Anda parameter (berikut cara memformat nilai tanggal untuk sesi Anda jika Anda tertarik).
Pembulatan ke Unit Tanggal yang Ditentukan
Berikut ini contoh menentukan unit tanggal yang berbeda untuk membulatkan tanggal menjadi:
SELECT
ROUND(DATE '2030-12-31', 'MONTH')
FROM DUAL;
Hasil:
01-JAN-31
Ini dia lagi, tetapi dengan berbagai tanggal lain:
SELECT
ROUND(DATE '2030-03-10', 'MONTH') AS "2030-03-10",
ROUND(DATE '2030-03-18', 'MONTH') AS "2030-03-18",
ROUND(DATE '2030-08-10', 'MONTH') AS "2030-08-10",
ROUND(DATE '2030-08-10', 'MONTH') AS "2030-08-10"
FROM DUAL;
Hasil:
2030-03-10 2030-03-18 2030-08-10 2030-08-10 _____________ _____________ _____________ _____________ 01-MAR-30 01-APR-30 01-AUG-30 01-AUG-30
Dan ini dia dengan tanggal yang sama, tetapi berbagai elemen format:
SELECT
ROUND(DATE '2030-10-31', 'DAY') AS "Day",
ROUND(DATE '2030-10-31', 'WW') AS "Week of year",
ROUND(DATE '2030-10-31', 'MONTH') AS "Month",
ROUND(DATE '2030-10-31', 'YEAR') AS "Year"
FROM DUAL;
Hasil:
Day Week of year Month Year ____________ _______________ ____________ ____________ 03-NOV-30 29-OCT-30 01-NOV-30 01-JAN-31
Ini menunjukkan seberapa banyak variasi yang dapat kita miliki, tergantung pada unit tanggal yang ditentukan.
Tanggal Negatif
Inilah yang terjadi jika kita mengubahnya menjadi kencan negatif:
SELECT
ROUND(DATE '-2030-10-31', 'DAY') AS "Day",
ROUND(DATE '-2030-10-31', 'WW') AS "Week of year",
ROUND(DATE '-2030-10-31', 'MONTH') AS "Month",
ROUND(DATE '-2030-10-31', 'YEAR') AS "Year"
FROM DUAL;
Hasil:
Day Week of year Month Year ____________ _______________ ____________ ____________ 28-OCT-30 29-OCT-30 01-NOV-30 01-JAN-29
Jelas, hasilnya akan berubah seiring perubahan tanggal.
Argumen Pembulatan Non-Tanggal
Inilah yang terjadi saat kami mencoba membulatkan argumen non-tanggal yang tidak dapat dikonversi ke DATE
tipe data:
SELECT ROUND('Bruce')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT ROUND('Bruce') FROM DUAL Error report - ORA-01722: invalid number
Namun, kita dapat membulatkan angka – ada versi numerik dari fungsi ini yang memungkinkan kita untuk membulatkan angka.
Nilai Null
Mencoba membulatkan null
mengembalikan null
, dan mencoba membulatkan tanggal dengan null
juga menghasilkan null
:
SET NULL 'null';
SELECT
ROUND(null),
ROUND(null, 'MONTH'),
ROUND(DATE '2030-12-20', null)
FROM DUAL;
Hasil:
ROUND(NULL) ROUND(NULL,'MONTH') ROUND(DATE'2030-12-20',NULL) ______________ ______________________ _______________________________ null null null
Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali null
terjadi sebagai akibat dari SQL SELECT
penyataan.
Namun, Anda dapat menggunakan SET NULL
untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null
harus dikembalikan.
Jumlah Argumen Salah
Memanggil ROUND()
tanpa memberikan argumen apa pun mengembalikan kesalahan:
SELECT ROUND()
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT ROUND() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
Dan meneruskan jumlah argumen yang salah menghasilkan kesalahan:
SELECT ROUND(DATE '2030-12-20', 'day', 'month')
FROM DUAL;
Hasil:
Error starting at line : 1 in command - SELECT ROUND(DATE '2030-12-20', 'day', 'month') FROM DUAL Error at Command Line : 1 Column : 40 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action: