Bird
Raised Fist0
SQLquery~20 mins

DATE_FORMAT and EXTRACT in SQL - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Date Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
What is the output of this DATE_FORMAT query?
Given a table events with a column event_date of type DATE, what is the output of the following query?
SELECT DATE_FORMAT(event_date, '%Y-%m-%d') AS formatted_date FROM events WHERE event_id = 1;
SQL
SELECT DATE_FORMAT(event_date, '%Y-%m-%d') AS formatted_date FROM events WHERE event_id = 1;
A'2023/15/07'
B'07/15/2023'
C'15-07-2023'
D'2023-07-15'
Attempts:
2 left
💡 Hint
The format string '%Y-%m-%d' means year-month-day with dashes.
❓ query_result
intermediate
2:00remaining
What does EXTRACT return for this date?
Consider the query:
SELECT EXTRACT(MONTH FROM '2024-02-29'::DATE) AS month_value;

What is the value of month_value?
SQL
SELECT EXTRACT(MONTH FROM '2024-02-29'::DATE) AS month_value;
A2
B29
C2024
DNULL
Attempts:
2 left
💡 Hint
EXTRACT(MONTH FROM date) returns the month number from the date.
📝 Syntax
advanced
2:00remaining
Which query correctly extracts the year from a timestamp?
You want to extract the year from a timestamp column named created_at. Which of the following queries is syntactically correct and returns the year as an integer?
ASELECT EXTRACT('YEAR' FROM created_at) FROM orders;
BSELECT EXTRACT(YEAR FROM created_at) FROM orders;
CSELECT EXTRACT(YEAR, created_at) FROM orders;
DSELECT EXTRACT(created_at, YEAR) FROM orders;
Attempts:
2 left
💡 Hint
EXTRACT uses the syntax EXTRACT(field FROM source). The field is not a string.
❓ optimization
advanced
2:00remaining
Optimizing date filtering with EXTRACT vs DATE_FORMAT
You want to select all rows from sales where the sale happened in March 2023. Which query is more efficient and why?
ASELECT * FROM sales WHERE EXTRACT(YEAR FROM sale_date) = 2023 AND EXTRACT(MONTH FROM sale_date) = 3;
BSELECT * FROM sales WHERE DATE_FORMAT(sale_date, '%Y-%m') = '2023-03';
CSELECT * FROM sales WHERE sale_date >= '2023-03-01' AND sale_date < '2023-04-01';
DSELECT * FROM sales WHERE sale_date LIKE '2023-03%';
Attempts:
2 left
💡 Hint
Filtering by range on the raw date column can use indexes better than functions on the column.
🔧 Debug
expert
2:00remaining
Why does this EXTRACT query raise an error?
Given the query:
SELECT EXTRACT(QUARTER FROM '2023-05-10');

It raises an error. What is the cause?
SQL
SELECT EXTRACT(QUARTER FROM '2023-05-10');
AThe date literal is missing a type cast to DATE or TIMESTAMP.
BThe EXTRACT function requires the date to be in ISO format.
CQUARTER is not a valid field for EXTRACT in SQL.
DThe FROM keyword is not allowed in EXTRACT.
Attempts:
2 left
💡 Hint
Check if the string literal is recognized as a date type by the database.

Practice

(1/5)
1. What does the SQL function EXTRACT(MONTH FROM '2024-06-15') return?
easy
A. '2024-06-15'
B. 15
C. 2024
D. 6

Solution

  1. Step 1: Understand EXTRACT function

    The EXTRACT function pulls out a specific part of a date, here the MONTH part.
  2. Step 2: Apply EXTRACT to the date

    From the date '2024-06-15', the month is 6 (June).
  3. Final Answer:

    6 -> Option D
  4. Quick Check:

    EXTRACT(MONTH FROM date) = 6 [OK]
Hint: EXTRACT pulls one date part, like month or year [OK]
Common Mistakes:
  • Confusing day with month
  • Expecting full date instead of part
  • Using wrong syntax for EXTRACT
2. Which of the following is the correct syntax to get the year from a date using EXTRACT in SQL?
easy
A. EXTRACT(YEAR FROM '2024-06-15')
B. EXTRACT YEAR FROM '2024-06-15'
C. EXTRACT('YEAR', '2024-06-15')
D. EXTRACT('2024-06-15' FROM YEAR)

Solution

  1. Step 1: Recall EXTRACT syntax

    The correct syntax is EXTRACT(part FROM date), with parentheses and FROM keyword.
  2. Step 2: Check each option

    EXTRACT(YEAR FROM '2024-06-15') matches the correct syntax: EXTRACT(YEAR FROM '2024-06-15'). Others miss parentheses or have wrong order.
  3. Final Answer:

    EXTRACT(YEAR FROM '2024-06-15') -> Option A
  4. Quick Check:

    Correct EXTRACT syntax uses parentheses and FROM [OK]
Hint: EXTRACT needs parentheses and FROM keyword [OK]
Common Mistakes:
  • Omitting parentheses
  • Swapping arguments order
  • Using quotes around part name
3. What is the output of this SQL query?
SELECT DATE_FORMAT('2024-06-15', '%Y-%m-%d'), EXTRACT(DAY FROM '2024-06-15');
medium
A. 2024-06-15, 6
B. 2024-06-15, 15
C. 2024/06/15, 15
D. 06-15-2024, 15

Solution

  1. Step 1: Understand DATE_FORMAT with '%Y-%m-%d'

    This format outputs year-month-day as '2024-06-15'.
  2. Step 2: Understand EXTRACT(DAY FROM date)

    Extracting DAY from '2024-06-15' gives 15.
  3. Final Answer:

    2024-06-15, 15 -> Option B
  4. Quick Check:

    DATE_FORMAT + EXTRACT day = '2024-06-15', 15 [OK]
Hint: DATE_FORMAT '%Y-%m-%d' matches original date format [OK]
Common Mistakes:
  • Mixing month and day order
  • Wrong format string in DATE_FORMAT
  • Extracting wrong date part
4. Identify the error in this SQL query:
SELECT DATE_FORMAT('2024-06-15', '%Y-%d-%m');
medium
A. The date string must be in MM-DD-YYYY format
B. DATE_FORMAT requires three arguments
C. The format string swaps day and month incorrectly
D. EXTRACT should be used instead of DATE_FORMAT

Solution

  1. Step 1: Analyze the format string '%Y-%d-%m'

    This format prints year, then day, then month, which is unusual and likely a mistake.
  2. Step 2: Understand common date format order

    Usually, month comes before day as '%Y-%m-%d'. Swapping day and month causes confusing output.
  3. Final Answer:

    The format string swaps day and month incorrectly -> Option C
  4. Quick Check:

    Correct order is year-month-day, not year-day-month [OK]
Hint: Check format order: month before day usually [OK]
Common Mistakes:
  • Mixing day and month in format string
  • Wrong number of arguments to DATE_FORMAT
  • Confusing DATE_FORMAT with EXTRACT
5. You want to list all orders from a table orders showing only the year and month of the order date in format YYYY-MM. Which SQL query correctly does this?
hard
A. SELECT DATE_FORMAT(order_date, '%Y-%m') AS year_month FROM orders;
B. SELECT EXTRACT(YEAR_MONTH FROM order_date) AS year_month FROM orders;
C. SELECT DATE_FORMAT(order_date, '%Y-%d') AS year_month FROM orders;
D. SELECT EXTRACT(MONTH FROM order_date) AS year_month FROM orders;

Solution

  1. Step 1: Understand DATE_FORMAT for year and month

    Using '%Y-%m' in DATE_FORMAT returns year and month as 'YYYY-MM'.
  2. Step 2: Check other options

    SELECT EXTRACT(YEAR_MONTH FROM order_date) AS year_month FROM orders; is invalid syntax; EXTRACT does not support YEAR_MONTH. SELECT DATE_FORMAT(order_date, '%Y-%d') AS year_month FROM orders; uses day instead of month. SELECT EXTRACT(MONTH FROM order_date) AS year_month FROM orders; returns only month number, missing year.
  3. Final Answer:

    SELECT DATE_FORMAT(order_date, '%Y-%m') AS year_month FROM orders; -> Option A
  4. Quick Check:

    DATE_FORMAT with '%Y-%m' gives year-month [OK]
Hint: Use DATE_FORMAT with '%Y-%m' for year and month [OK]
Common Mistakes:
  • Using EXTRACT with unsupported parts
  • Mixing day and month in format
  • Selecting only month without 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