Slik filtrerer du et intervall med BETWEEN i SQL

Lær å filtrere verdier i et intervall med BETWEEN i SQL. Tall, datoer og NOT BETWEEN forklart med eksempler. Gratis video.

Du skal finne alle fakturaer med totalbeløp mellom 3 og 6 kroner. Du kan skrive WHERE total >= 3 AND total <= 6, men SQL har en snarvei som er enklere å lese. Den heter BETWEEN.

BETWEEN filtrerer rader innenfor et intervall. Det fungerer med tall, datoer og tekst, og gjør spørringene dine mer lesbare enn å bruke to separate sammenligninger.

Grunnleggende syntaks

BETWEEN brukes i WHERE-setningen og tar to verdier: en nedre og en øvre grense.

SELECT * FROM invoices WHERE total BETWEEN 3 AND 6;

Denne spørringen returnerer alle fakturaer der totalbeløpet er fra 3 til 6. Begge grenseverdiene er inkludert. En faktura med total på nøyaktig 3 eller nøyaktig 6 vil altså bli med i resultatet.

Det er det samme som å skrive:

SELECT * FROM invoices WHERE total >= 3 AND total <= 6;

Resultatet er identisk, men BETWEEN-versjonen er kortere og lettere å forstå ved første øyekast.

BETWEEN med datoer

Et av de vanligste bruksområdene for BETWEEN er datofiltrering. Si at du vil finne alle fakturaer fra januar 2023:

SELECT * FROM invoices WHERE invoice_date BETWEEN '2023-01-01' AND '2023-01-31';

Legg merke til at datoverdiene står i apostrofer. SQL krever dette for datoer, i motsetning til tall som skrives uten. Formatet er YYYY-MM-DD, som er standarden i de fleste databaser.

Datointervaller med BETWEEN er spesielt nyttige i rapportering. Du kan raskt hente ut data for en bestemt uke, måned eller et kvartal uten å skrive lange betingelser.

NOT BETWEEN: utenfor intervallet

NOT BETWEEN gir deg det motsatte. Det returnerer alle rader som faller utenfor det angitte intervallet.

SELECT * FROM invoices WHERE total NOT BETWEEN 3 AND 6;

Her får du fakturaer der totalen er under 3 eller over 6. Grenseverdiene (3 og 6) er ekskludert fra resultatet med NOT BETWEEN. Dette er en viktig forskjell: BETWEEN inkluderer grenseverdiene, mens NOT BETWEEN ekskluderer dem.

BETWEEN med tekst

BETWEEN fungerer også med tekstverdier, der sammenligningen er alfabetisk:

SELECT * FROM customers WHERE last_name BETWEEN 'A' AND 'M';

Denne gir deg kunder med etternavn som starter med A til og med M. I praksis er dette sjelden like nyttig som tall- og datofiltrering, men det kan være greit å vite at muligheten finnes.

Kombinere BETWEEN med andre betingelser

BETWEEN er en del av WHERE-setningen, så du kan kombinere det med AND, OR og andre operatorer:

SELECT * FROM invoices WHERE total BETWEEN 3 AND 6 AND customer_id = 3;

Her filtrerer du på både beløpsintervall og kunde-ID. Du kan også bruke BETWEEN sammen med LIKE eller IN for å bygge mer presise spørringer.

Pass på grenseverdiene

Den vanligste misforståelsen med BETWEEN er om grenseverdiene er inkludert eller ikke. Svaret i standard SQL er tydelig: begge grenseverdiene er inkludert. BETWEEN 3 AND 6 betyr 3, 4, 5 og 6 (og alle desimaltall imellom).

Med datoer kan dette skape en subtil felle. Hvis du skriver BETWEEN '2023-01-01' AND '2023-12-31' og databasen lagrer tidspunkt (datetime), vil du bare få med rader fra 31. desember som har tidspunkt nøyaktig 00:00:00. Rader fra senere på dagen faller utenfor. I slike tilfeller kan det være tryggere å bruke < på sluttdatoen:

SELECT * FROM invoices WHERE invoice_date >= '2023-01-01' AND invoice_date < '2024-01-01';

I databaser som bare lagrer dato uten tidspunkt (som SQLite sin DATE-type) er dette ikke et problem. Da dekker BETWEEN '2023-01-01' AND '2023-12-31' hele året som forventet.

Når bør du bruke BETWEEN?

Bruk BETWEEN når du filtrerer på et sammenhengende intervall. Det er ideelt for tallintervaller og datoperioder. For mer spesifikke verdier som ikke er et intervall (for eksempel kunde 1, 3 og 7) er IN et bedre valg.

BETWEEN gjør spørringene enklere å lese, og det er ingen ytelsesforskjell sammenlignet med å bruke >= og <=. Velg det som er mest lesbart for den aktuelle spørringen.

BETWEEN i rapportering

BETWEEN er et av de mest brukte verktøyene i rapportering. Typiske bruksområder er å hente data for en bestemt måned, et kvartal eller et regnskapsår. Du kan kombinere det med GROUP BY for å lage oppsummeringer innenfor tidsperioder.

SELECT customer_id, SUM(total) AS periode_total FROM invoices WHERE invoice_date BETWEEN '2023-01-01' AND '2023-03-31' GROUP BY customer_id;

Denne gir deg total omsetning per kunde for første kvartal 2023. Ved å endre datoene i BETWEEN kan du raskt lage den samme rapporten for ulike perioder. Det er en teknikk du kommer til å bruke ofte når du jobber med reelle datasett.

Vanlige feil med BETWEEN

  • Glemme apostrofer rundt datoer. BETWEEN 2023-01-01 AND 2023-12-31 fungerer ikke. Du må skrive BETWEEN '2023-01-01' AND '2023-12-31'.
  • Snu rekkefølgen. BETWEEN 6 AND 3 gir null resultater i de fleste databaser. Den laveste verdien må komme først.
  • Anta at NOT BETWEEN inkluderer grenseverdiene. NOT BETWEEN 3 AND 6 ekskluderer 3 og 6 fra resultatet.

Neste steg

BETWEEN gir deg enkel intervallfiltrering. Kombiner det med ORDER BY for å sortere resultatene, eller utforsk aggregering for å beregne summer og gjennomsnitt innenfor intervallene dine.

Denne videoen er hentet fra kurset SQL for nybegynnere på Utdannet.no. Kurset tar deg gjennom SQL fra grunnleggende spørringer til avanserte teknikker, med praktiske eksempler hele veien.