Bird
Raised Fist0
PostgreSQLquery~10 mins

AGE function for differences in PostgreSQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - AGE function for differences
Input: two dates
↓
Calculate difference
↓
Return interval result
↓
Output age as years, months, days
The AGE function takes two dates and calculates the difference between them, returning the result as an interval showing years, months, and days.
Execution Sample
PostgreSQL
SELECT AGE('2024-06-15', '2020-01-10');
Calculates the difference between June 15, 2024 and January 10, 2020 as an interval.
Execution Table
StepInput DatesActionIntermediate ResultOutput
1'2024-06-15', '2020-01-10'Parse datesDates recognizedN/A
2Dates parsedCalculate difference4 years, 5 months, 5 daysN/A
3Difference calculatedFormat as intervalInterval type4 years 5 mons 5 days
4Result formattedReturn outputFinal interval4 years 5 mons 5 days
💡 Completed calculation and returned interval representing age difference.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
date1N/A2024-06-152024-06-152024-06-152024-06-15
date2N/A2020-01-102020-01-102020-01-102020-01-10
differenceN/AN/A4 years 5 mons 5 days4 years 5 mons 5 days4 years 5 mons 5 days
Key Moments - 2 Insights
Why does AGE return an interval instead of just a number?
AGE returns an interval to show the difference in years, months, and days clearly, as seen in execution_table step 3 where the result is formatted as an interval.
What happens if the first date is earlier than the second date?
AGE will return a negative interval showing the difference in reverse order, but the calculation steps remain the same as shown in execution_table.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output after step 3?
ADates recognized
B4 years 5 mons 5 days
CFinal interval
DN/A
💡 Hint
Check the 'Output' column in row for step 3 in execution_table.
At which step is the difference between the two dates calculated?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at the 'Action' column in execution_table to find when calculation happens.
If date1 was '2019-01-10' and date2 was '2020-06-15', how would the difference appear?
A-1 year 5 mons 5 days
B1 year 5 mons 5 days
C4 years 5 mons 5 days
D-4 years 5 mons 5 days
💡 Hint
AGE returns negative interval if first date is earlier, check variable_tracker for date order.
Concept Snapshot
AGE(date1, date2) returns the interval difference between two dates.
Result shows years, months, and days.
If date1 is earlier, result is negative interval.
Useful for calculating age or time spans.
Returns type: interval.
Full Transcript
The AGE function in PostgreSQL calculates the difference between two dates and returns it as an interval showing years, months, and days. It first parses the input dates, then calculates the difference, formats it as an interval, and finally returns the result. The output helps understand the exact time span between two dates, useful for age calculations. If the first date is earlier than the second, the result is a negative interval. This step-by-step execution shows how the function processes inputs and produces the output interval.

Practice

(1/5)
1. What does the PostgreSQL AGE function return when given two timestamps?
easy
A. The number of seconds between the two timestamps as an integer
B. The difference between the two timestamps as an interval showing years, months, and days
C. The sum of the two timestamps as a new timestamp
D. The earlier of the two timestamps

Solution

  1. Step 1: Understand the AGE function purpose

    The AGE function calculates the time difference between two timestamps.
  2. Step 2: Identify the output format

    It returns the difference as an interval showing years, months, and days.
  3. Final Answer:

    The difference between the two timestamps as an interval showing years, months, and days -> Option B
  4. Quick Check:

    AGE returns interval difference [OK]
Hint: AGE shows difference as years, months, days interval [OK]
Common Mistakes:
  • Thinking AGE returns seconds or integer
  • Confusing AGE with addition or subtraction of timestamps
  • Assuming AGE returns a timestamp
2. Which of the following is the correct syntax to get the age difference between two timestamps '2023-01-01' and '2024-06-01' in PostgreSQL?
easy
A. SELECT AGE('2024-06-01', '2023-01-01');
B. SELECT AGE('2023-01-01', '2024-06-01');
C. SELECT AGE('2024-06-01'::timestamp '2023-01-01'::timestamp);
D. SELECT AGE('2023-01-01'::timestamp, '2024-06-01'::timestamp);

Solution

  1. Step 1: Check AGE function parameter order

    AGE calculates the difference as first timestamp minus second timestamp, so the later date should come first.
  2. Step 2: Identify correct syntax with proper order

    Using AGE('2024-06-01', '2023-01-01') returns the positive interval difference.
  3. Final Answer:

    SELECT AGE('2024-06-01', '2023-01-01'); -> Option A
  4. Quick Check:

    Later date first in AGE [OK]
Hint: Put later date first in AGE function [OK]
Common Mistakes:
  • Reversing the order of timestamps
  • Not casting strings to timestamps when needed
  • Using AGE with only one parameter incorrectly
3. What is the output of this query?
SELECT AGE('2024-06-01'::date, '2023-01-01'::date);
medium
A. 1 year 5 mons 1 day
B. 1 year 6 mons 0 days
C. 1 year 4 mons 30 days
D. 1 year 5 mons 0 days

Solution

  1. Step 1: Calculate difference between dates

    From 2023-01-01 to 2024-06-01 is 1 year and 5 months exactly.
  2. Step 2: Understand AGE output format

    AGE returns interval as years, months, and days; days are zero here.
  3. Final Answer:

    1 year 5 mons 0 days -> Option D
  4. Quick Check:

    AGE returns 1 year 5 mons 0 days [OK]
Hint: Count full years and months between dates [OK]
Common Mistakes:
  • Counting months incorrectly as 6 instead of 5
  • Confusing days count
  • Assuming AGE returns total days only
4. Identify the error in this query:
SELECT AGE('2023-01-01');
medium
A. Incorrect date format used
B. AGE function cannot accept a single argument
C. No error; AGE accepts a single argument
D. AGE requires casting to timestamp explicitly

Solution

  1. Step 1: Check AGE function argument requirements

    AGE can accept one or two arguments; with one argument it returns difference from current date.
  2. Step 2: Analyze the query

    The query uses one argument but does not cast it; however, AGE accepts one argument as timestamp or date.
  3. Step 3: Identify actual error

    The query is valid; PostgreSQL implicitly handles the date string and computes age to current timestamp. No error.
  4. Final Answer:

    No error; AGE accepts a single argument -> Option C
  5. Quick Check:

    AGE needs two timestamps or one with current date [OK]
Hint: AGE with one argument uses current date [OK]
Common Mistakes:
  • Assuming AGE always needs two arguments
  • Thinking date format is wrong
  • Believing casting is mandatory
5. You want to find the exact age difference between a person's birthdate '1990-04-15' and today, but only in years ignoring months and days. Which query correctly uses AGE and extracts only the years part?
hard
A. SELECT EXTRACT(YEAR FROM AGE(CURRENT_DATE, '1990-04-15'));
B. SELECT EXTRACT(YEAR FROM AGE('1990-04-15', CURRENT_DATE));
C. SELECT AGE(CURRENT_DATE, '1990-04-15')::year;
D. SELECT DATE_PART('year', AGE('1990-04-15', CURRENT_DATE));

Solution

  1. Step 1: Use AGE with current date and birthdate

    AGE(CURRENT_DATE, '1990-04-15') returns interval from birthdate to today.
  2. Step 2: Extract only the year part

    Use EXTRACT(YEAR FROM interval) to get full years ignoring months and days.
  3. Final Answer:

    SELECT EXTRACT(YEAR FROM AGE(CURRENT_DATE, '1990-04-15')); -> Option A
  4. Quick Check:

    EXTRACT YEAR from AGE with later date first [OK]
Hint: Use EXTRACT(YEAR FROM AGE(later, earlier)) [OK]
Common Mistakes:
  • Reversing AGE argument order
  • Using wrong function like DATE_PART with reversed arguments
  • Trying to cast interval directly to year
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard