DATE arithmetic (DATEDIFF, DATE_ADD) in SQL - Time & Space Complexity
When working with dates in SQL, we often calculate differences or add days. Understanding how the time it takes to do this grows with data size helps us write better queries.
We want to know: how does the work grow when we do date calculations on many rows?
Analyze the time complexity of the following code snippet.
SELECT employee_id,
DATEDIFF(day, hire_date, GETDATE()) AS days_worked,
DATEADD(day, 30, hire_date) AS trial_end_date
FROM employees;
This query calculates how many days each employee has worked and finds a date 30 days after their hire date.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The database processes each row in the employees table once.
- How many times: Once per employee record, so as many times as there are rows.
Each row requires a fixed amount of work to calculate date differences and add days.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 date calculations |
| 100 | 100 date calculations |
| 1000 | 1000 date calculations |
Pattern observation: The work grows directly with the number of rows. Double the rows, double the calculations.
Time Complexity: O(n)
This means the time to run the query grows in a straight line with the number of rows processed.
[X] Wrong: "Date calculations like DATEDIFF or DATEADD take the same time no matter how many rows there are."
[OK] Correct: Each row needs its own calculation, so more rows mean more work and longer time.
Knowing how date functions scale helps you explain query performance clearly and shows you understand how databases handle data row by row.
"What if we added a WHERE clause to filter only recent hires? How would that affect the time complexity?"
Practice
DATEDIFF('2024-06-10', '2024-06-01') return?Solution
Step 1: Understand DATEDIFF parameters
DATEDIFF calculates the number of days between the first date and the second date.Step 2: Calculate the difference
From June 1 to June 10, there are 9 days difference (10 - 1 = 9).Final Answer:
9 -> Option DQuick Check:
DATEDIFF('2024-06-10', '2024-06-01') = 9 [OK]
- Counting both start and end dates
- Mixing order of dates in DATEDIFF
- Assuming difference is 10 instead of 9
Solution
Step 1: Recall DATE_ADD syntax
The correct syntax is DATE_ADD(date, INTERVAL number unit), e.g., INTERVAL 5 DAY.Step 2: Check each option
Only DATE_ADD('2024-06-01', INTERVAL 5 DAY) follows the correct syntax with INTERVAL 5 DAY.Final Answer:
DATE_ADD('2024-06-01', INTERVAL 5 DAY) -> Option AQuick Check:
Correct DATE_ADD syntax uses INTERVAL before number and unit [OK]
- Omitting INTERVAL keyword
- Swapping number and unit order
- Placing INTERVAL after unit
SELECT DATEDIFF('2024-07-01', DATE_ADD('2024-06-25', INTERVAL 3 DAY)) AS diff;Solution
Step 1: Calculate DATE_ADD('2024-06-25', INTERVAL 3 DAY)
Adding 3 days to June 25 gives June 28, 2024.Step 2: Calculate DATEDIFF('2024-07-01', '2024-06-28')
The difference between July 1 and June 28 is 3 days (June 29, 30, July 1).Final Answer:
3 -> Option BQuick Check:
DATEDIFF('2024-07-01', '2024-06-28') = 3 [OK]
- Counting days incorrectly between dates
- Forgetting to add days before DATEDIFF
- Assuming DATEDIFF counts inclusive days
SELECT DATE_ADD('2024-06-01', 5 DAY);Solution
Step 1: Review DATE_ADD syntax
DATE_ADD requires INTERVAL keyword before the number and unit.Step 2: Check the given statement
The statement misses INTERVAL before '5 DAY', causing syntax error.Final Answer:
Missing INTERVAL keyword before 5 DAY -> Option CQuick Check:
DATE_ADD needs INTERVAL before number and unit [OK]
- Omitting INTERVAL keyword
- Using wrong date format
- Adding semicolon inside function
Solution
Step 1: Calculate deadline date
Deadline is 10 days after June 15, so DATE_ADD('2024-06-15', INTERVAL 10 DAY) = June 25.Step 2: Calculate days left from June 20 to deadline
DATEDIFF(deadline, current_date) = DATEDIFF('2024-06-25', '2024-06-20') = 5 days left.Final Answer:
SELECT DATEDIFF(DATE_ADD('2024-06-15', INTERVAL 10 DAY), '2024-06-20') AS days_left; -> Option AQuick Check:
Days left = deadline - current date = 5 [OK]
- Swapping date order in DATEDIFF
- Adding interval to wrong date
- Using wrong syntax for INTERVAL
Ready to prove it?
Pass the test and this pattern moves unknown
