N032-M4 Tier 3 · Intermediate · medium ecommerce · Brightlane

Return both literals cast as timezone-aware timestamps in a single row

Part of Date and Time Types in PostgreSQL in SQL

The problem

Brightlane's data pipeline audit is confirming that two string representations refer to the same absolute moment in time: '2024-06-15 09:00:00+00' (UTC) and '2024-06-15 05:00:00-04:00' (Eastern Daylight Time, UTC-4).

Write a query to return both literals cast as timezone-aware timestamps in a single row.

Output:

  • A single row with columns utc_time and edt_time.
Schema · ecommerce 5 tables
categories
id integer
name text
parent_id? integer
products
id integer
name text
category_id integer
price numeric
stock_qty integer
attributes? jsonb
order_items
id integer
order_id integer
product_id integer
quantity integer
unit_price numeric
customers
id integer
name text
email text
city? text
country text
created_at timestamptz
is_active boolean
orders
id integer
customer_id integer
ordered_at timestamptz
status text
total_amount numeric

Run previews · Check grades

Write a query, then run it to see results here.

Worked solution Try it yourself first
Solution query
SELECT
  '2024-06-15 09:00:00+00'::TIMESTAMPTZ AS utc_time,
  '2024-06-15 05:00:00-04:00'::TIMESTAMPTZ AS edt_time

The shape

Two TIMESTAMPTZ casts on two differently-spelled literals resolve to the same stored value, because the UTC conversion happens at parse time. 09:00 UTC and 05:00 EDT describe the same absolute moment from two different clocks, and TIMESTAMPTZ stores absolute moments, not clock readings.

Clause by clause

  • SELECT '2024-06-15 09:00:00+00'::timestamptz AS utc_time resolves the first literal: 09:00 wall-clock plus +00 offset gives 2024-06-15 09:00:00 in UTC. The cast lands the destination type and triggers the conversion.
  • '2024-06-15 05:00:00-04:00'::timestamptz AS edt_time resolves the second literal: 05:00 wall-clock plus -04:00 offset, which PostgreSQL adds back to land on 09:00 UTC. Same stored value as the first column, reached from a different starting point.
  • There is no FROM because the values come directly from literals.

Why two casts and not a single cast plus an offset rewrite

The audit's point is that TIMESTAMPTZ equality is anchored to the absolute moment, not the input spelling. A single cast on either literal would prove only that one of them parses; running both casts side by side proves that two visibly different inputs resolve to the same stored value. The two columns in the output are the demonstration. The ::timestamptz cast on each is what makes the conversion happen at parse time; without it, both would be string literals and the comparison would be character-by-character, which would say they are different when in fact they are not.

The trap

The wall-clock readings (09:00 versus 05:00) look like they should compare unequal, and any reader trained on TIMESTAMP semantics would expect them to. TIMESTAMPTZ is different. The offset is part of the value, the conversion happens at parse, and the stored representation is always UTC. Two TIMESTAMPTZ literals are equal whenever they describe the same absolute moment, regardless of which wall clock they came from. The ::timestamptz cast is what makes this true; ::timestamp casts on the same literals would preserve the wall-clock difference and the columns would not match.

You practiced casting two equivalent literals to TIMESTAMPTZ — different wall clocks plus different offsets resolve to the same absolute moment and the same stored value.

How you actually get good at SQL

Reading explains SQL. Writing it, over and over with instant feedback, is what makes you fluent.

That's the whole SQLMaxx loop: 600+ real problems, instant AI feedback, mastery you can actually see, and spaced review that won't let you forget.

A stack of SQL practice problem cards, the top card showing an employees table.
615 problems · 66 concepts

Real problems. Not toy examples.

615 hand-built problems spanning all 66 concepts, from basic SELECTs to window functions, built on real schemas and real business questions, the kind you'll actually get asked on the job. Enough reps to make SQL automatic.

A retro computer showing a SQL query marked correct with a green checkmark.
Instant AI feedback

Write a query. Know if it's right in one second.

No copying an answer and hoping it clicked. The AI grader checks your real query against real data, catches exactly what's wrong, and explains the fix in plain English, like a senior analyst reading over your shoulder on every problem.

A circular mastery progress dial filling from blue to green, the SQLMaxx diamond at its center.
Mastery tracking

Stop guessing whether you actually know it.

SQLMaxx tracks every concept and shows you what you've mastered and what's still shaky. Your skills fill in one concept at a time, so 'I think I get joins' becomes something you can prove.

A SQL query editor circled by a blue return arrow with a clock, scheduled to come back for review.
Spaced review

Learn it once. Keep it for good.

Most of what you learn this week fades by next week. So when a concept comes due for review, SQLMaxx hands you a fresh problem to solve from a blank editor, not a flashcard to re-read. A research-backed spaced-repetition algorithm (FSRS) times each return for right before you'd forget, so your SQL is still there months later, when the interview or the job actually needs it.

Practice, feedback, mastery, review. That's the loop that turns reading into real skill.

Start free

No account, no credit card. Start solving in under a minute.