DATE Functions (SYSDATE, SYSTIMESTAMP, TO_CHAR, TRUNC, ROUND, NEXT_DAY, LAST_DAY, MONTHS_BETWEEN, ADD_MONTHS)

Date functions are the surgical tools of database management, allowing you to slice, shift, and calculate timelines to track everything from library overdue fines to student semester milestones.

12 min read · 12 cards · 3 checks

Read in: English · हिन्दी · ગુજરાતી


Theory

The Clock is Ticking

Imagine your university library database. You need to calculate the exact fine for a student who returned a book late, determine which students will graduate in exactly six months, or format a raw timestamp into a readable 'DD-MON-YYYY' report. If you treat dates as simple strings or integers, you will fail to account for leap years, variable month lengths, and time-of-day offsets. How does a database engine intelligently manipulate time so that adding 'one month' to January 31st results in February 28th (or 29th) instead of an invalid date?

Theory

The Timepiece vs. The Calendar Sheet

Think of SYSDATE as your wristwatch, showing the exact time right now. Functions like TRUNC and ROUND are like adjusting that watch: TRUNC is like 'locking' the watch to the start of the day (ignoring the hours/minutes), while ROUND is like pushing the hand to the nearest hour or month. Date functions give you the power to manipulate time, shifting it forward, backward, or trimming away the unnecessary precision of seconds and milliseconds.

Theory

Essential Date Function Arsenal

In Oracle SQL, date manipulation is built upon a standard internal 7-byte representation. Mastering the function library allows you to perform complex arithmetic without worrying about the underlying calendar complexity.

At a glance

Table 1: Common Oracle Date Functions for BCA laboratory assignments.

FunctionPurposeUsage Example
SYSDATEReturns the current system date and time.SELECT SYSDATE FROM DUAL;
SYSTIMESTAMPReturns current date, time, and fractional seconds/time zone.SELECT SYSTIMESTAMP FROM DUAL;
ADD_MONTHS(d, n)Adds n months to date d.ADD_MONTHS(SYSDATE, 1)
MONTHS_BETWEEN(d1, d2)Returns months between two dates.MONTHS_BETWEEN(d1, d2)
TRUNC(d, fmt)Trims date to the start of the unit.TRUNC(SYSDATE, 'MM')
NEXT_DAY(d, day)Finds the next specified weekday.NEXT_DAY(SYSDATE, 'FRIDAY')

Theory

Worked Example: The Overdue Fine Calculator

Let’s calculate how many days a student has exceeded their library book return date, and determine their new deadline if we grant them a one-month extension.

Practical

Library Deadline Logic

-- Assume book_due_date is a column in our 'loans' table
-- 1. Calculate how many months past due
SELECT 
    student_id, 
    TRUNC(MONTHS_BETWEEN(SYSDATE, book_due_date)) AS months_late,
    ADD_MONTHS(book_due_date, 1) AS extended_deadline
FROM loans
WHERE SYSDATE > book_due_date;

Copy and open Oracle FreeSQL
Oracle FreeSQL is a free online editor for Oracle SQL. The code is copied first: paste it there and run it.

Think first

The ROUND vs TRUNC Trap

If today is July 15th, 2026, what will be the result of TRUNC(SYSDATE, 'MM') and ROUND(SYSDATE, 'MM')?

Show the answer

Both return July 1st, 2026, and that is exactly the point of this trap. TRUNC(SYSDATE, 'MM') always chops back to the start of the month, so it gives July 1st. ROUND(SYSDATE, 'MM') rounds to the nearest month boundary, and Oracle only rounds UP from the 16th of the month onward. Since the 15th falls just before that cutoff, ROUND also lands on July 1st. Had the date been July 16th, ROUND would have jumped forward to August 1st while TRUNC stayed on July 1st.

Quiz

Which function is specifically designed to add or subtract whole months from a given date while automatically handling different month lengths and leap years?

  1. SYSDATE + 30
  2. ADD_MONTHS
  3. MONTHS_BETWEEN
  4. TO_DATE_ADD
Show the answer

ADD_MONTHS

ADD_MONTHS is the only function that correctly handles the varying lengths of months and leap years. Simple arithmetic like '+ 30' just adds 30 days, which might land you on a different day of the month than intended.

Quiz

What is the primary difference between SYSDATE and SYSTIMESTAMP?

  1. SYSDATE includes time zone info, SYSTIMESTAMP does not.
  2. SYSDATE is for dates only; SYSTIMESTAMP includes fractional seconds and time zone info.
  3. They are identical in Oracle.
  4. SYSTIMESTAMP is only for older versions of Oracle.
Show the answer

SYSDATE is for dates only; SYSTIMESTAMP includes fractional seconds and time zone info.

SYSTIMESTAMP provides much higher precision, capturing fractional seconds and time zone offsets, which is critical for transaction logging and performance auditing.

Watch out

The Classic Trap: Date Format Strings

When using TO_CHAR(date, 'format'), remember that 'mm' is for months and 'mi' is for minutes! A common error in semester exams is writing TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MM:SS'), this will result in repeating the month code in the minute position. Always use 'MI' for minutes!

Theory

Connecting Date Functions to Semester 3

Understanding date arithmetic is the foundation for Business Intelligence modules in Semester 3. You will eventually use these same functions to generate 'Year-over-Year' or 'Quarter-to-Date' analytical reports, where manipulating date boundaries is a daily requirement.

Summary

Key takeaways

  • SYSDATE provides the current server date/time; SYSTIMESTAMP adds precision and time zone data.
  • TRUNC locks a date to the beginning of the specified unit (e.g., month, year).
  • ROUND moves a date to the nearest unit boundary (up or down).
  • ADD_MONTHS is the safest way to perform month-based date arithmetic.
  • Always use 'MI' for minutes in formatting to avoid the 'MM' (month) conflict.
  • Memory Hook: ADD_MONTHS handles the calendar math for you, never add numbers manually if you can avoid it!

Study this properly

This page is the lesson to read. In Gri-Learn the same topic is a graded deck: the self-checks are scored and your weak topics are tracked. Free to start.

Start this topic

Already have an account? Sign in

More from Advanced SQL

Gri-Learn · syllabus-mapped B.C.A. lessons in English, Hindi and Gujarati

DATE Functions (SYSDATE, SYSTIMESTAMP, TO_CHAR, TRUNC, ROUND, NEXT_DAY, LAST_DAY, MONTHS_BETWEEN, ADD_MONTHS) · Concepts of Relational Database Management Systems · Gri-Learn