DEV Community

Cover image for Handling Dates and Times in Oracle Database
Luca Liu
Luca Liu

Posted on

Handling Dates and Times in Oracle Database

Working with date and time data is a crucial aspect of database operations. Oracle provides a rich set of built-in functions and features for handling dates and timestamps efficiently. This article will explore practical tips and tricks for manipulating, extracting, and calculating date and time values in Oracle.

Understanding Date and Time Data Types in Oracle

In Oracle, date and time are stored in the following data types:

DATE: Stores both date and time (down to seconds). Default format: DD-MON-YYYY HH24:MI:SS.
TIMESTAMP: Extends DATE to include fractional seconds.
INTERVAL: Represents a span of time (e.g., days, hours, minutes).

Common Date Functions in Oracle

Oracle provides many built-in functions for manipulating dates.

1. SYSDATE and CURRENT_DATE

SYSDATE: Returns the current date and time from the database server.
CURRENT_DATE: Returns the current date and time in the user’s session time zone.

Example:

SELECT SYSDATE AS ServerTime, CURRENT_DATE AS UserSessionTime FROM DUAL;
Enter fullscreen mode Exit fullscreen mode

Result:

ServerTime UserSessionTime
29-DEC-2023 14:35:12 29-DEC-2023 14:35:12

2. Adding or Subtracting Days and Months

+ or -: Add or subtract days directly.
ADD_MONTHS: Add or subtract months.

Example:

SELECT 
    SYSDATE AS Today,
    SYSDATE + 7 AS NextWeek,
    ADD_MONTHS(SYSDATE, 1) AS NextMonth
FROM DUAL;
Enter fullscreen mode Exit fullscreen mode

Result:

Today NextWeek NextMonth
29-DEC-2023 14:35:12 05-JAN-2024 14:35:12 29-JAN-2024 14:35:12

3. Calculating Differences Between Dates

MONTHS_BETWEEN: Calculates the number of months between two dates.
SYSDATE- date: Calculates the difference in days.

Example:

SELECT 
    MONTHS_BETWEEN(SYSDATE, TO_DATE('01-JAN-2023', 'DD-MON-YYYY')) AS MonthsDiff,
    SYSDATE - TO_DATE('25-DEC-2023', 'DD-MON-YYYY') AS DaysDiff
FROM DUAL;
Enter fullscreen mode Exit fullscreen mode

Result:

MonthsDiff DaysDiff
11.9 4

4. Truncating Dates

TRUNC(date, 'format'): Truncates a date to a specified unit, such as the start of the month or year.

Example:

SELECT 
    TRUNC(SYSDATE, 'MM') AS StartOfMonth,
    TRUNC(SYSDATE, 'YYYY') AS StartOfYear
FROM DUAL;
Enter fullscreen mode Exit fullscreen mode

Result:

StartOfMonth StartOfYear
01-DEC-2023 00:00:00 01-JAN-2023 00:00:00

Extracting Parts of a Date

Use the following functions to extract specific parts of a date:

1. EXTRACT

Extracts components such as year, month, day, hour, minute, or second.

Example:

SELECT 
    EXTRACT(YEAR FROM SYSDATE) AS Year,
    EXTRACT(MONTH FROM SYSDATE) AS Month,
    EXTRACT(DAY FROM SYSDATE) AS Day
FROM DUAL;
Enter fullscreen mode Exit fullscreen mode

Result:

Year Month Day
2023 12 29

2. TO_CHAR

Converts a date to a string in a specified format.

Example:

SELECT 
    TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS ISODate,
    TO_CHAR(SYSDATE, 'Day') AS DayName,
    TO_CHAR(SYSDATE, 'HH24:MI:SS') AS Time
FROM DUAL;
Enter fullscreen mode Exit fullscreen mode

Result:

ISODate DayName Time
2023-12-29 Friday 14:35:12

Practical Examples

1. Filtering Records Based on Date Ranges

Task: Retrieve sales in December 2023.

SELECT * 
FROM Sales
WHERE SaleDate BETWEEN TO_DATE('01-DEC-2023', 'DD-MON-YYYY') 
                   AND TO_DATE('31-DEC-2023', 'DD-MON-YYYY');
Enter fullscreen mode Exit fullscreen mode

2. Grouping Sales Data by Month

Task: Summarize total sales by month.

SELECT 
    TO_CHAR(SaleDate, 'YYYY-MM') AS SaleMonth,
    SUM(Amount) AS TotalSales
FROM Sales
GROUP BY TO_CHAR(SaleDate, 'YYYY-MM')
ORDER BY SaleMonth;
Enter fullscreen mode Exit fullscreen mode

Result:

SaleMonth TotalSales
2023-01 6700
2023-12 500

Conclusion

Oracle SQL offers powerful tools for handling date and time data, enabling you to manipulate, filter, and analyze temporal data effectively. By mastering these functions and techniques, you can handle a wide range of date-related requirements, from simple filtering to advanced calculations. Practice these examples in your Oracle database to strengthen your skills!


Explore more

Thank you for taking the time to explore data-related insights with me. I appreciate your engagement.

🚀 Connect with me on LinkedIn

Top comments (0)