SQL Academy · Lektion

EXTRACT, DATE_TRUNC, AGE

Hent dele af en dato med EXTRACT, afrund tidsstempler til en grænse med DATE_TRUNC, og beregn læsevenlige forskelle med AGE.

Lektion 2 af 413 trin

EXTRACT, DATE_TRUNC, AGE er en gratis SQL Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

EXTRACT: Hent en del af en dato

EXTRACT(part FROM ts) returnerer én numerisk del:

SELECT EXTRACT(YEAR  FROM created_at) AS yr,
       EXTRACT(MONTH FROM created_at) AS mo,
       EXTRACT(DAY   FROM created_at) AS d,
       EXTRACT(DOW   FROM created_at) AS day_of_week
FROM orders;

Almindelige dele i EXTRACT

Nyttige dele: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, DOW (0=Sun), DOY (1–366), WEEK, QUARTER, EPOCH.

SELECT EXTRACT(EPOCH FROM (NOW() - created_at)) AS seconds_ago
FROM events;

DATE_TRUNC: Juster til en grænse

DATE_TRUNC(unit, ts) nulstiller alt under den angivne enhed — den mest nyttige funktion til grupperede rapporter:

SELECT date_trunc('day',   NOW());   -- 2024-03-15 00:00:00
SELECT date_trunc('week',  NOW());
SELECT date_trunc('month', NOW());
SELECT date_trunc('hour',  NOW());

Grupperede rapporter

Månedlig omsætning med date_trunc:

SELECT date_trunc('month', created_at) AS month,
       SUM(total) AS revenue
FROM orders
GROUP BY 1
ORDER BY 1;

År til dato / måned til dato

Sammenlign den aktuelle periode med det samme tidspunkt sidste år:

-- This month so far
SELECT SUM(total) FROM orders
WHERE created_at >= date_trunc('month', NOW())
  AND created_at <  date_trunc('month', NOW()) + INTERVAL '1 month';

AGE: Kalenderbevidst forskel

AGE returnerer år + måneder + dage, ikke kun dage:

SELECT AGE('2024-03-15', '2020-12-01');
-- → '3 years 3 months 14 days'

SELECT EXTRACT(YEAR FROM AGE('2024-03-15', '2020-12-01'));  -- 3

AGE med to argumenter

AGE med ét argument sammenligner med current_date:

SELECT AGE(birth_date) FROM users LIMIT 5;

Logik for ugedage

EXTRACT(DOW): 0=søndag … 6=lørdag. ISO_DOW: 1=mandag … 7=søndag.

SELECT * FROM orders
WHERE EXTRACT(ISODOW FROM created_at) IN (6, 7);  -- weekend orders

Tidszone i EXTRACT

EXTRACT på TIMESTAMPTZ bruger sessionens tidszone. Brug AT TIME ZONE til at styre den:

SELECT EXTRACT(HOUR FROM created_at AT TIME ZONE 'UTC') FROM events;
SELECT EXTRACT(HOUR FROM created_at AT TIME ZONE 'Europe/Berlin') FROM events;

Trunkering efter et brugerdefineret tidsvindue

Til tidsvinduer, der ikke følger kalenderen (hvert 5. minut), skal du bruge aritmetik:

SELECT to_timestamp(
  floor(EXTRACT(EPOCH FROM created_at) / 300) * 300
) AS bucket_5min,
COUNT(*)
FROM events
GROUP BY 1
ORDER BY 1;

Funktionsbaserede indekser til trunkering

Hvis du ofte grupperer efter date_trunc('day', created_at), hjælper et funktionsbaseret indeks:

CREATE INDEX events_day_idx ON events ((date_trunc('day', created_at)));

Opsummering

EXTRACT + DATE_TRUNC + AGE dækker de fleste rapporteringsbehov.

  • EXTRACT til enkelte dele
  • DATE_TRUNC til at justere til en grænse
  • AGE til kalenderbevidste tidsintervaller

Hurtigt tjek

Du vil tælle nye brugere pr. måned. Hvilken funktion grupperer datoer efter måned?

Gratis at komme i gang

Lær SQL med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “EXTRACT, DATE_TRUNC, AGE” gratis?

Ja — hele teksten til “EXTRACT, DATE_TRUNC, AGE” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “EXTRACT, DATE_TRUNC, AGE”?

Hent dele af en dato med EXTRACT, afrund tidsstempler til en grænse med DATE_TRUNC, og beregn læsevenlige forskelle med AGE. Du øver dig i SQL Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “EXTRACT, DATE_TRUNC, AGE”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne SQL Academy-lektion?

Ja. Alle SQL Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Datoregning og INTERVAL
  2. EXTRACT, DATE_TRUNC, AGE
  3. Tidszoner: TIMESTAMP kontra TIMESTAMPTZ
  4. Typiske datarapporter (MTD, WoW, YoY)
← Tilbage til SQL Academy