Bagi mereka yang biasa dengan Sybase dan MS SQL mungkin sedikit 'ralat' kerana ketiadaan fungsi dateadd yang biasa digunakan untuk data jenis datetime/date. Ini kerana Database Oracle menggunakan kaedah + atau - dalam operasi data jenis date, kecuali fungsi add_months yang disediakan untuk operasi + - bagi bulan.
Untuk mengatasi masalah ini apa yang perlu dibuat ialah membuat satu user function yang berfungsi seperti dateadd di dalam Sybase ataupun MS SQL. Di sini saya sertakan contoh script yang boleh digunakan.
Untuk mengatasi masalah ini apa yang perlu dibuat ialah membuat satu user function yang berfungsi seperti dateadd di dalam Sybase ataupun MS SQL. Di sini saya sertakan contoh script yang boleh digunakan.
CREATE OR REPLACE FUNCTION f_dateadd
(
pi_mode IN CHAR,
pi_num IN NUMBER,
pi_startdate IN DATE
)
RETURN DATE
AS
lv_returndate date;
BEGIN
/*-Mode Value --------------------------------
Script by : http://kuasapembina.blogspot.com
----------------------------------------------
'D' = Day , 'W' = Week
'M' = Bulanan 'Q' = Quarter
'H' = Half-Year 'Y' = Year
----------------------------------------------*/
IF pi_mode = 'D' THEN -- Day
lv_returndate := trunc(pi_startdate) + pi_num;
END IF;
IF pi_mode = 'W' THEN -- Week
lv_returndate := trunc(pi_startdate) + (7 * pi_num);
END IF;
IF pi_mode = 'M' THEN -- Month
lv_returndate := add_months(trunc(pi_startdate), pi_num);
END IF;
IF pi_mode = 'Q' THEN -- Quarter
lv_returndate := add_months(trunc(pi_startdate), (3 * pi_num));
END IF;
IF pi_mode = 'Y' THEN -- Year
lv_returndate := add_months(trunc(pi_startdate), (12 * pi_num));
END IF;
IF pi_mode = 'H' THEN -- Half Year
lv_returndate := add_months(trunc(pi_startdate), (6 * pi_num));
END IF;
RETURN lv_returndate;
END;
Cara memanggil script dalam SELECT :
SELECT f_dateadd('D', 3, sysdate) FROM dual;
SELECT f_dateadd('D', 3, to_date('17 nov 2009')) FROM dual;
Di dalam contoh di atas, kedua-duanya menghasilkan jawapan yang sama iaitu :
----------
20/11/2009
Selamat Mencuba.

