Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Fungsi ROUND(tanggal) di Oracle

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kunci dan indeks utama dalam bahasa kueri Hive mungkin atau tidak?

  2. Berapa ukuran maksimal VARCHAR2 di PL/SQL dan SQL?

  3. Apa yang setara dengan REF CURSOR Oracle di MySQL saat menggunakan JDBC?

  4. Apa pengaturan untuk melihat bagian waktu dengan tanggal di pengembang Oracle PL/SQL?

  5. Bagaimana Mengekspor Data dari Oracle SQL Developer ke Excel?