Problem:
Sådan udtrækkes en understreng fra en streng i PostgreSQL/MySQL
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:
| jake99@gmail.com |
| tamarablack@zoho.com |
| notine@yahoo.fr |
| jessica1995@onet.pl |
Løsning 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
En anden syntaks:
SELECT email, SUBSTRING(email FROM 1 FOR 7) AS substring FROM emails;
Resultatet er:
| understreng | |
|---|---|
| jake99@gmail.com | jake99@ |
| tamarablack@zoho.com | tamarab |
| notine@yahoo.fr | notine@ |
| jessica1995@onet.pl | 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 e-mail-kolonnen, der starter i begyndelsen af strengene (første tegn) og går efter syv tegn. Den anden notation, SUBSTRING(email FROM 1 FOR 7) , gør præcis det samme. Argumentet efter FROM er startindekset og argumentet efter FOR er understrengens længde.
Det tredje argument for SUBSTRING() funktion er valgfri. Hvis du udelader det, får du den understreng, der starter ved indekset i det andet argument og går helt op til slutningen af strengen. SUBSTRING(email, 1) returnerer hele strengen, ligesom SUBSTRING(email FROM 1) .
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;
En anden syntaks:
SELECT
email,
SUBSTRING(email FROM POSITION('@' IN email)) AS substring
FROM emails;
Resultatet er:
| understreng | |
|---|---|
| jake99@gmail.com | @gmail.com |
| tamarablack@zoho.com | @zoho.com |
| notine@yahoo.fr | @yahoo.fr |
| jessica1995@onet.pl | @onet.pl |
Diskussion:
Du bruger SUBSTRING() fungerer som 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 POSITION(character IN column) funktion, hvor tegn er det specifikke tegn, hvor du vil starte understrengen (her, @ ). Argumentkolonnen er column hvorfra du gerne vil hente understrengen; det kan også være en bogstavelig streng.
Hvis du ønsker, at understrengen skal gå helt til slutningen af den oprindelige streng, er det tredje argument i SUBSTRING() funktionen (eller FOR argument) er ikke nødvendig. Ellers skal det være længden af understrengen, eller du kan beregne det ved hjælp af POSITION() fungere. Du vil måske også hente en understreng, der ikke ender i slutningen af strengen, men med et bestemt tegn, f.eks. før '.'. Her er et eksempel:
SELECT
email,
SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;
En anden syntaks:
SELECT
email,
SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;
Resultatet af denne forespørgsel er:
| understreng | |
|---|---|
| jake99@gmail.com | @gmail |
| tamarablack@zoho.com | @zoho |
| notine@yahoo.fr | @yahoo |
| jessica1995@onet.pl | @onet |
Delen POSITION('.' IN email) - POSITION('@' IN email) beregner blot længden af understrengen.