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

MONTHS_BETWEEN() Fungsi di Oracle

Di Oracle Database, MONTHS_BETWEEN() fungsi mengembalikan jumlah bulan antara dua tanggal.

Sintaks

Sintaksnya seperti ini:

MONTHS_BETWEEN(date1, date2)

Contoh

Ini contohnya:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;

Hasil:

4

Dalam hal ini, ada tepat empat bulan di antara kedua tanggal tersebut.

Bulan dan hari terakhir bulan ditentukan oleh parameter sesi NLS_CALENDAR . Lihat Cara Memeriksa Nilai Parameter NLS untuk mengetahui kalender yang digunakan sesi Anda. Milik saya menggunakan kalender Gregorian.

Bulan Pecahan

Fungsi ini memungkinkan untuk bulan pecahan. Jika kedua tanggal tersebut menyertakan porsi hari yang berbeda, maka Oracle Database akan mengerjakan komponen pecahan yang dapat digunakan.

Contoh:

SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;

Hasil:

3.51612903225806451612903225806451612903

Bulan Negatif

Jika tanggal kedua lebih lambat dari tanggal pertama, maka jumlah negatif dikembalikan:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;

Hasil:

-4

Tanggal Di Luar Rentang

Tanggal nol dan tanggal di luar rentang lainnya menghasilkan kesalahan.

Contoh:

SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL
Error at Command Line : 1 Column : 47
Error report -
SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0
01841. 00000 -  "(full) year must be between -4713 and +9999, and not be 0"
*Cause:    Illegal year entered
*Action:   Input year in the specified range

Seperti yang dinyatakan oleh pesan kesalahan, tahun (penuh) harus antara -4713 dan +9999 , dan bukan 0 .

Membandingkan Tanggal dengan Tanggal Saat Ini

Kita dapat melewati SYSDATE sebagai argumen datetime untuk membandingkan tanggal dengan tanggal saat ini:

SELECT 
    SYSDATE,
    MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;

Hasil:

     SYSDATE     MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') 
____________ ____________________________________________ 
13/AUG/21       -102.587825194145758661887694145758661888

Argumen Tidak Ada

Memanggil MONTHS_BETWEEN() dengan jumlah argumen yang salah, atau tanpa memberikan argumen apa pun, menghasilkan kesalahan:

SELECT MONTHS_BETWEEN()
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT MONTHS_BETWEEN()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00909: invalid number of arguments
00909. 00000 -  "invalid number of arguments"
*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. Adakah kerugian dari bendera bit di kolom basis data?

  2. Memeriksa informasi Jaringan dan IP Oracle RAC

  3. Bagaimana cara melewatkan parameter bernilai tabel dari C# ke prosedur tersimpan Oracle

  4. java.security.AccessControlException:akses ditolak (java.security.SecurityPermission authProvider.SunMSCAPI)

  5. Bagaimana cara menghindari kata yang dicadangkan di Oracle?