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: