I SQL-sproget kan du indsætte konstante værdier som en kolonne, og du kan lave beregninger direkte i en forespørgsel. Beregninger og indsættelse af konstante kolonneværdier er nyttigt i flere situationer. Enten fordi der er krav om, at der leveres eksempelvis en pris med moms, men værdien er skrevet uden moms. Eller der kan være et ønske om, at alle rækker har en kolonne med en bestemt oplysning, f.eks. for at identificere data i forbindelse med samkøring af data fra flere kilder.
Når du ændrer en kolonnes oprindelige værdi eller indsætter en kolonne med konstant værdi, vil SQL Server ikke længere give dig navnet på kolonnen. Det er der umiddelbart to grunde til: For det første kan det give dataforvirring, hvis en kolonne har samme navn, men en ny værdi, og for det andet kan beregningen indeholde flere kolonner, og det er så ikke tydeligt hvilket kolonnenavn, der skal bruges. Derfor navngiver/omdøber jeg konsekvent kolonner, der laves beregninger på. Se mere om at omdøbe og navngive kolonner i denne lektion.
Sådan beregner du moms på priskolonne
Et ganske åbenlyst eksempel er at lave en momsberegning af priskolonnen i varetabellen. Momsen i Danmark (i skrivende stund) er 25%. Vi skal altså gange prisen med 1,25. Gangetegnet i SQL Server er *. Det skal ikke forveksles med * i forbindelse med visning af alle kolonner i en SELECT.
SELECT Varenr, Varebetegnelse, Pris PrisUdenMoms, Pris*1.25 PrisMedMoms FROM Vare
Konstante værdier i en kolonne
Det kan være nødvendigt eller bare praktisk at have en eller flere kolonner med kontante værdier i. Det er supernemt, du skal bare skrive værdien som var det et felt. Tekstværdier skal skrives i apostroffer.
Dette eksempel skriver en kolonne med teksten Boblekuvert TILBUD og laver dertil en kolonne med værdien 50, som er den rabatprocent, der ydes. Selvfølgelig beregnes prisen også.
SELECT 'Boblekuvert TILBUD' Tilbudsinformation, 50 Rabatprocent, Varebetegnelse, Pris NormalprisUdenMoms, Pris*0.5 TilbudsprisUdenMoms FROM Vare WHERE Varenr LIKE 'BOBA%'
Tekstfelter kan også manipuleres
Du kan også manipulere tekstfelter, f.eks. ved at lægge en tekst til, eller bruge en tekstfunktion til at afkorte eller på anden måde ændre værdien. Her skriver vi Halv pris! foran varebetegnelsen.
SELECT 'Boblekuvert TILBUD' Tilbudsinformation, 'Halv pris! ' + Varebetegnelse Varebetegnelse, Pris NormalprisUdenMoms, Pris*0.5 TilbudsprisUdenMoms FROM Vare WHERE Varenr LIKE 'BOBA%'
Regnearter og funktioner
SQL Server kender de almindelige regnearter og har en masse indbyggede funktioner til forskellige formål. Denne forespørgsel viser de fire regnearter og eksempler på et par indbyggede funktioner.
- SIGN(værdi): Viser fortegnet af værdien. -1 negativ, 0 nul, 1 positiv.
- ROUND(værdi, antaldecimaler): afrunder værdien til det ønskede antal decimaler.
- RAND(): viser et tilfældigt tal mellem 0 og 1. Bemærk, at der ikke beregnes en ny værdi i hver række!
SELECT Pris, Pris*2 Multiplikation, Pris/2 Division, Pris+2 Addition, Pris-0.2 Subtraktion, SIGN(Pris) FortegnPostiv, SIGN(-Pris) FortegnNegativ, SIGN(0) FortegnNul, ROUND(Pris/7, 4) Afrund4decimaler, ROUND(Pris/7, 2) Afrund2decimaler, RAND() Tilfældig FROM Vare WHERE Varenr LIKE 'BOBA%'
Prøv selv
- I Ordrelinje-tabellen er der antal, pris og rabat (i kroner pr. enhed). Lav en kolonne, der viser totalen.
- Lav en forespørgsel med en Varebetegnelse-kolonne, hvor varenummer skrives i parentes efter varebetegnelsen. Kolonnens navn skal stadig være Varebetegnelse.
- Funktionen DATEDIFF beregner tidsrum mellem to datoer. Første parameter er enheden. Brug DATEDIFF(enhed, dato1, dato2) og GETDATE() til at finde ud af, hvor mange dage (parameter hedder d), der er siden ordrerne i Ordre-tabellen er oprettet.
I løsningen i videoen er der også løsning på antal timer, uger og måneder.