Skip to content

5.1 — Date Handling

What You'll Learn

  • How to filter and format dates in SQL
  • Common date functions and comparisons
  • How this compares to Excel’s date handling

Working with Dates in SQL

Here is the sales data we'll use in our examples:

ProductAmountSaleDate
Apples1202024-05-01
Apples902024-05-15
Oranges802024-05-03
Oranges702024-06-10
Bananas602024-05-20
Bananas502024-06-05
Pears402024-05-25
Pears302024-06-15

In Excel, you might use filters or functions like YEAR(), MONTH(), or custom date formatting. SQL provides similar functions and lets you filter by date ranges.

Example: Filter sales in May 2024

sql
SELECT *
FROM sales
WHERE SaleDate >= Date '2024-05-01' AND SaleDate <= Date '2024-05-31';

Example: Extract year and month

sql
SELECT SaleDate, YEAR(SaleDate) AS Sale_Year, MONTH(SaleDate) AS Sale_Month
FROM sales;
  • Functions like Date, YEAR(), MONTH(), and DAY() work in most databases (syntax may vary).

Grouping by Month or Year

You can group data by month or year for trend analysis:

sql
SELECT YEAR(SaleDate) AS Sale_Year, MONTH(SaleDate) AS Sale_Month, SUM(Amount) AS Total_Sales
FROM sales
GROUP BY YEAR(SaleDate), MONTH(SaleDate)
ORDER BY Sale_Year, Sale_Month;

Formatting Dates

Some databases let you format dates for display:

sql
SELECT DATE_FORMAT(SaleDate, '%Y-%m') AS YearMonth, SUM(Amount) AS Total
FROM sales
GROUP BY YearMonth;
-- PostgreSQL/Oracle/Teradata: TO_CHAR(SaleDate, 'YYYY-MM')
-- Snowflake: TO_VARCHAR(SaleDate, 'YYYY-MM')
-- Databricks (Spark SQL): DATE_FORMAT(SaleDate, 'yyyy-MM')

(Syntax may vary: check your database documentation for details.)

  • PostgreSQL/Oracle/Teradata: TO_CHAR(SaleDate, 'YYYY-MM')
  • Snowflake: TO_VARCHAR(SaleDate, 'YYYY-MM')
  • Databricks (Spark SQL): DATE_FORMAT(SaleDate, 'yyyy-MM')

Common Date Functions by Database

PurposePostgreSQL / Oracle / TeradataSQL ServerDatabricks (Spark SQL)Snowflake / BigQueryMySQL / MariaDB
Extract YearEXTRACT(YEAR FROM SaleDate) or TO_CHAR(SaleDate, 'YYYY')YEAR(SaleDate)year(SaleDate)YEAR(SaleDate)YEAR(SaleDate)
Extract MonthEXTRACT(MONTH FROM SaleDate) or TO_CHAR(SaleDate, 'MM')MONTH(SaleDate)month(SaleDate)MONTH(SaleDate)MONTH(SaleDate)
Extract DayEXTRACT(DAY FROM SaleDate) or TO_CHAR(SaleDate, 'DD')DAY(SaleDate)day(SaleDate)DAY(SaleDate)DAY(SaleDate)
Format Date YYYY-MMTO_CHAR(SaleDate, 'YYYY-MM')FORMAT(SaleDate, 'yyyy-MM')date_format(SaleDate, 'yyyy-MM')TO_VARCHAR(SaleDate, 'YYYY-MM')DATE_FORMAT(SaleDate, '%Y-%m')
Add DaysSaleDate + n (days) or ADD_DAYS(SaleDate, n)DATEADD(day, n, SaleDate)date_add(SaleDate, n)DATEADD(day, n, SaleDate)DATE_ADD(SaleDate, INTERVAL n DAY)
Current DateCURRENT_DATEGETDATE()current_date()CURRENT_DATE()CURDATE()

Note: Syntax may vary slightly depending on your database version. Always check your database documentation for details.

Calculating the Number of Days Between Two Dates

You can calculate the difference in days between two dates using built-in functions. This is similar to subtracting dates in Excel.

Examples:

DatabaseSyntax Example
PostgreSQL / Oracle / TeradataSELECT EndDate - StartDate AS Days_Diff FROM sales;
SQL ServerSELECT DATEDIFF(day, StartDate, EndDate) AS Days_Diff FROM sales;
Databricks (Spark SQL)SELECT datediff(EndDate, StartDate) AS Days_Diff FROM sales;
Snowflake / BigQuerySELECT DATEDIFF(day, StartDate, EndDate) AS Days_Diff FROM sales;
MySQL / MariaDBSELECT DATEDIFF(EndDate, StartDate) AS Days_Diff FROM sales;
  • Replace StartDate and EndDate with your actual column names.
  • The result is the number of days between the two dates.

Note: The order of arguments may differ in some databases. Always check your database documentation for details.

Key Points

  • SQL can filter, extract, and group by dates, just like Excel.
  • Date functions and formats may differ by database.

Next Steps

Next, you’ll learn how to handle missing values (NULL) in your data.