Problem:
Du har en kolonne med strenge, og du vil gerne have understrenge fra dem.
Eksempel 1:
I emails
tabel, er der en e-mail-kolonne. Du vil gerne vise de første syv tegn i hver e-mail.
Tabellen ser således ud:
[email protected] |
[email protected] |
[email protected] |
[email protected] |
Løsning 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Resultatet er:
understreng | |
---|---|
[email protected] | jake99@ |
[email protected] | tamarab |
[email protected] | notine@ |
[email protected] | jessica |
Diskussion:
Brug SUBSTRING()
fungere. Det første argument er strengen eller kolonnenavnet. Det andet argument er indekset for det tegn, hvor understrengen skal begynde. Det tredje argument er længden af understrengen.
Pas på! I modsætning til nogle andre programmeringssprog starter indeksene ved 1 , ikke 0. Det betyder, at det første tegn har indeks 1, det andet tegn har indeks 2 osv.
SUBSTRING(email, 1, 7)
returnerer understrengene af værdierne i email
kolonne, der starter ved det første tegn og går efter syv tegn.
Eksempel 2:
Du vil gerne vise understrengen mellem indeks 2 og 6 (inklusive).
Løsning 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Resultatet er:
understreng | |
---|---|
[email protected] | ake99 |
[email protected] | amara |
[email protected] | otine |
[email protected] | essentiel |
Diskussion:
Du bruger SUBSTRING()
fungerer ligesom i de foregående eksempler. Denne gang er det andet argument for funktionen 2
, da vi vil starte ved indeks 2. Længden af understrengen er 5 (end_index - start_index + 1
).
Eksempel 3:
Du vil gerne vise den understreng, der starter ved @
tegn og slutter for enden af strengen, men du kender ikke de nøjagtige indekser eller længder.
Løsning 3:
SELECT email, SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) AS substring FROM emails;
Resultatet er:
understreng | |
---|---|
[email protected] | @gmail.com |
[email protected] | @zoho.com |
[email protected] | @yahoo.fr |
[email protected] | @onet.pl |
Diskussion:
Du bruger SUBSTRING()
fungerer ligesom i de foregående eksempler. Denne gang leder du efter en bestemt karakter, hvis position kan variere fra række til række. For at finde indekset for det specifikke tegn, kan du bruge CHARINDEX(character, column)
funktion hvor tegn er det specifikke tegn, som du vil starte understrengen med (her @
). Argumentkolonnen er den kolonne, hvorfra du gerne vil hente understrengen; det kan også være en bogstavelig streng.
Det tredje argument for SUBSTRING()
funktion er længden af understrengen. Du kan beregne det ved at bruge CHARINDEX()
og LEN()
funktioner. Det gør du ved at trække indekset fra kolonnelængden og derefter tilføje 1:
LEN(email) - CHARINDEX('@', email) + 1
Du vil måske også hente en understreng, der ikke slutter i slutningen af strengen, men på et bestemt tegn, f.eks. før '.
'. Sådan kan du gøre dette:
SELECT email, SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', email)) AS substring FROM emails;
Resultatet af denne forespørgsel er:
understreng | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
Delen CHARINDEX('.', email) - CHARINDEX('@', email)
beregner blot længden af understrengen.