The New Home of Oracle-wiki.net
All things oracle...
A website for IT Professionals involved with Oracle database.
Useful Date Manipulation SQL
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT TRUNC (SYSDATE, 'MONTH') FROM DUAL;
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT TRUNC (LAST_DAY (SYSDATE)) FROM DUAL;
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT CAST (TO_CHAR (LAST_DAY (SYSDATE), 'dd') AS INT) FROM DUAL;
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT SYSDATE,LAST_DAY (SYSDATE) "Last",LAST_DAY (SYSDATE) - SYSDATE FROM DUAL;
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT TRUNC (SYSDATE, 'YEAR') FROM DUAL;
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT (SYSDATE - TRUNC (SYSDATE)) * 24 * 60 * 60 FROM DUAL;
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT (TRUNC (SYSDATE+1) - SYSDATE) * 24 * 60 * 60 FROM DUAL;
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT
ADD_MONTHS (TRUNC (SYSDATE, 'MONTH'), i) start_date,
TRUNC (LAST_DAY (ADD_MONTHS (SYSDATE, i))) end_date
FROM XMLTABLE
('for $i in 0 to xs:int(D) return $i'PASSING XMLELEMENT (d,FLOOR (MONTHS_BETWEEN (ADD_MONTHS (TRUNC (SYSDATE, 'YEAR') - 1, 12),SYSDATE)))COLUMNS i INTEGER PATH '.')
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT ROUND ( (MONTHS_BETWEEN ('01-Jan-2000', '01-Jan-2010'), 0) FROM DUAL
/
SET PAUSE ON
SET PAUSE 'Press return to Continue'
SET LINESIZE 300
SET PAGESIZE 60
SELECT ADD_MONTHS (TRUNC (SYSDATE, 'YEAR'), 12) - 1 "Year Last Day" FROM DUAL
/
Published on
Published 26th March 2026