Funktioner til håndtering af tekststrenge
Der findes en lang række funktioner til behandling af tekststrenge.
Først en lille oversigt
Funktion | Beskrivelse |
LEFT(felt, n) |
Returnerer n tegn fra feltet fra venstre mod højre |
RIGHT(felt, n) |
Returnerer n tegn fra feltet fra højre mod venstre |
LTRIM(felt) |
Fjerner foranstillede mellemrum fra feltet |
RTRIM(felt) |
Fjerner efterstillede mellemrum fra feltet |
SUBSTRING(felt, n, m) |
Returnerer m tegn fra feltet startende ved n |
UPPER(felt) |
Konverterer feltet til store bogstaver |
LOWER(felt) |
Konverterer feltet til små bogstaver |
LEN(felt) |
Returnerer antallet af tegn i feltet |
CHARINDEX(tekst, felt, n) |
Returnerer placeringen af tekst i feltet startende i n (man behøver ikke angive n) |
REVERSE(felt) |
Returnerer teksten spejlvendt |
CONCAT(felt1, felt2, felt3,..) |
Sammensætter felterne (svarende til +, som vi har set tidligere) |
REPLACE(tekst, tekst1, tekst2) |
Erstatter alle forekomster af tekst1 i tekst med tekst2 |
De fleste af funktionerne giver sig selv - vi skal dog nok lige give de sidste 3 et par ord mere med på vejen.
CHARINDEX()
Kast et blik på tabellen Person.Address
Vil man gerne have husnummeret ud af AddressLine1 kan man bruge CHARINDEX() - det kan se sådan her ud:
SELECT LEFT(AddressLine1, CHARINDEX(' ', AddressLine1))
AS HouseNo, AddressLine1
FROM Person.Address;
Og giver dette output (prøv selv)
CHARINDEX(' ', AddressLine1) giver os positionen af det første mellemrum i teksten og LEFT sørger så for at vi får alle tegnene hen til det mellemrum. Som man ser er det ikke 100% skudsikkert, men der er vilkårene og lærer os, at man skal sørge for at få data i den rigtige opdeling med det samme frem for at skulle dele det efterfølgende.
Har man danske adresser på formen "Nørre Voldgade 12" kan man også godt splitte med CHARINDEX - det kunne se sådan her ud
SELECT AddressLine1,
RIGHT(AddressLine1, CHARINDEX(' ', REVERSE(AddressLine1)))
AS HouseNo FROM Person.Address;
Udfordringen er, at vi skal have fundet det positionen af det sidste mellemrum. Og her kan man så benytte REVERSE funktionen, der spejlvender teksten. Prøv det...
CONCAT()
Vi har tidligere set, at man kan sætte tekstfelter sammen med +, men så også, at hvis ét af felterne har værdien NULL bliver det samlede resultat også NULL.
CONCAT() kan sætte tekstfelter sammen også selvom nogle af felterne har værdien NULL - funktionen konverterer automatisk NULL til en tom tekststreng ''.