YEAR, MONTH, DAY extraction in SQL - Time & Space Complexity
We want to understand how the time to extract parts of a date grows as we have more data.
How does the work change when we extract year, month, or day from many rows?
Analyze the time complexity of the following code snippet.
SELECT
YEAR(order_date) AS order_year,
MONTH(order_date) AS order_month,
DAY(order_date) AS order_day
FROM orders;
This query extracts the year, month, and day parts from the order_date column for every row in the orders table.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Extracting year, month, and day from each date value.
- How many times: Once for each row in the orders table.
Each row requires the same fixed amount of work to extract the date parts.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 extractions |
| 100 | 100 extractions |
| 1000 | 1000 extractions |
Pattern observation: The work grows directly with the number of rows.
Time Complexity: O(n)
This means the time to extract year, month, and day grows linearly with the number of rows.
[X] Wrong: "Extracting year, month, and day is a constant time operation regardless of rows, so the query runs instantly no matter the data size."
[OK] Correct: While each extraction is quick, the database must do it for every row, so more rows mean more total work and longer time.
Understanding how simple operations scale with data size helps you explain query performance clearly and confidently.
"What if we added a WHERE clause to filter rows before extracting year, month, and day? How would the time complexity change?"
Practice
EXTRACT(YEAR FROM order_date) return when used on a date column?Solution
Step 1: Understand the EXTRACT function
The EXTRACT function is used to get a specific part of a date, such as year, month, or day.Step 2: Identify the part requested
Here, EXTRACT(YEAR FROM order_date) extracts the year part from the date in theorder_datecolumn.Final Answer:
The year part of the date in order_date -> Option BQuick Check:
EXTRACT(YEAR FROM date) = year number [OK]
- Confusing YEAR with MONTH or DAY
- Expecting full date instead of part
- Using wrong syntax like EXTRACT(order_date YEAR)
sale_date?Solution
Step 1: Recall the correct EXTRACT syntax
The correct syntax is EXTRACT(part FROM source), where part is YEAR, MONTH, or DAY.Step 2: Match syntax with options
EXTRACT(MONTH FROM sale_date) uses EXTRACT(MONTH FROM sale_date), which matches the correct syntax.Final Answer:
EXTRACT(MONTH FROM sale_date) -> Option AQuick Check:
EXTRACT(part FROM date) is correct syntax [OK]
- Omitting FROM keyword
- Swapping order of arguments
- Using commas inside EXTRACT
events with a column event_date storing dates, what will this query return?SELECT EXTRACT(DAY FROM event_date) FROM events WHERE EXTRACT(MONTH FROM event_date) = 12;Solution
Step 1: Analyze the WHERE clause
The WHERE clause filters rows where the month part ofevent_dateis 12 (December).Step 2: Analyze the SELECT clause
The SELECT clause extracts the day part fromevent_datefor those filtered rows.Final Answer:
All day numbers of events that happened in December -> Option DQuick Check:
EXTRACT filters month=12, selects day numbers [OK]
- Confusing day with month in SELECT
- Expecting full date instead of day number
- Thinking query has syntax error
SELECT EXTRACT(YEAR sale_date) FROM sales;Solution
Step 1: Check EXTRACT syntax
EXTRACT requires the syntax EXTRACT(part FROM source). The keyword FROM is missing here.Step 2: Confirm correct usage
The correct query should be SELECT EXTRACT(YEAR FROM sale_date) FROM sales;Final Answer:
Missing FROM keyword inside EXTRACT -> Option AQuick Check:
EXTRACT(part FROM date) needs FROM [OK]
- Omitting FROM keyword
- Putting column name in quotes
- Thinking EXTRACT can't use dates
orders table with a order_date column. Which query correctly filters these orders?Solution
Step 1: Identify correct EXTRACT usage for day and year
We want day = 15 and year = 2023, so EXTRACT(DAY FROM order_date) = 15 and EXTRACT(YEAR FROM order_date) = 2023.Step 2: Check each option
SELECT * FROM orders WHERE EXTRACT(DAY FROM order_date) = 15 AND EXTRACT(YEAR FROM order_date) = 2023; matches the correct conditions. SELECT * FROM orders WHERE DAY(order_date) = 15 AND YEAR(order_date) = 2023; uses non-standard functions that may not work in all SQL dialects. SELECT * FROM orders WHERE EXTRACT(MONTH FROM order_date) = 15 AND EXTRACT(YEAR FROM order_date) = 2023; incorrectly uses MONTH = 15. SELECT * FROM orders WHERE EXTRACT(DAY FROM order_date) = 2023 AND EXTRACT(YEAR FROM order_date) = 15; swaps day and year values incorrectly.Final Answer:
SELECT * FROM orders WHERE EXTRACT(DAY FROM order_date) = 15 AND EXTRACT(YEAR FROM order_date) = 2023; -> Option CQuick Check:
Filter day=15 and year=2023 with EXTRACT [OK]
- Mixing up day and month
- Using non-standard functions without checking dialect
- Swapping day and year values
Ready to prove it?
Pass the test and this pattern moves unknown
