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

ADD_MONTHS() Fungsi di Oracle

Di Oracle Database, ADD_MONTHS() fungsi menambahkan jumlah bulan tertentu ke tanggal, dan mengembalikan hasilnya.

Sintaks

Sintaksnya seperti ini:

ADD_MONTHS(date, integer)

Dimana date dapat berupa nilai datetime atau nilai apa pun yang dapat dikonversi secara implisit ke DATE .

integer argumen dapat berupa bilangan bulat atau nilai apa pun yang dapat dikonversi secara implisit menjadi bilangan bulat.

Jenis yang dikembalikan selalu DATE , terlepas dari tipe data date .

Contoh

Ini contohnya:

SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;

Hasil:

01/APR/20

Contoh ini menampilkan tanggal berdasarkan nilai NLS_DATE_FORMAT sistem saya parameter (yang saat ini DD/MON/RR ). Kita dapat mengubah parameter ini, atau menggunakan fungsi seperti TO_CHAR() untuk mengembalikan hasilnya dalam format yang berbeda.

Contoh:

SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;

Hasil:

2020-04-01

Kurangi Bulan

Untuk mengurangi bulan dari tanggal, gunakan nilai negatif untuk argumen kedua.

Contoh:

SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;

Hasil:

01/OCT/19

Melewati Berbagai Format Tanggal

Tanggal dapat diberikan dalam berbagai format, asalkan menjadi tanggal:

SELECT ADD_MONTHS('01 Jan 2020', 3)
FROM DUAL;

Hasil:

01/APR/20

Tetapi melewatkan satu yang tidak dapat diselesaikan menghasilkan kesalahan:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL
Error report -
ORA-01858: a non-numeric character was found where a numeric was expected

Namun, ini dapat bergantung pada nilai NLS_DATE_FORMAT parameter. Jika kita mengubah parameter ini:

ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

Hasil:

       VALUE 
____________ 
Mon DD RR   

Dan kemudian jalankan kueri lagi:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Hasil:

Apr 01 20

Kami tidak lagi mendapatkan kesalahan.

Argumen Null

Melewati tanggal null mengembalikan null :

SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;

Hasil:

null

Tetapi melewatkan null untuk argumen kedua menghasilkan kesalahan:

SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL
Error report -
ORA-01843: not a valid month

Perhatikan bahwa 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. Pada contoh di atas, saya menetapkan bahwa string null harus dikembalikan.

Jumlah Argumen Tidak Valid

Melewati sejumlah argumen yang tidak valid menghasilkan kesalahan:

SELECT ADD_MONTHS(3)
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT ADD_MONTHS(3)
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. Jalankan Oracle Client dalam mode 32-bit pada mesin 64-bit

  2. Praktik yang baik untuk membuka/menutup koneksi di aplikasi asp.net?

  3. Apa yang dapat menyebabkan ROWID Oracle berubah?

  4. orator

  5. Menginstal Klien Oracle Warehouse Builder 11g R2