Problem:
Du vil udtrække en understreng fra teksten i en given kolonne.
Eksempel:
Vores database har en tabel med navnet web_address
med data i kolonnerne id
og address
. Vi ønsker at fjerne 'www.
' i begyndelsen og '.com
’ i slutningen af hver address
.
id | adresse |
---|---|
1 | www.example.com |
2 | www.google.com |
3 | www.learnsql.com |
Løsning 1:
Sådan fjerner du de første 4 tegn:
SELECT SUBSTR(address, 5, LENGTH(address) -4) AS substring FROM web_address;
Sådan fjerner du de sidste 4 tegn:
SELECT SUBSTR(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Sådan fjerner du de første 4 tegn og de sidste 4 tegn:
SELECT SUBSTR(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Løsning 2:
Sådan fjerner du de første 4 tegn:
SELECT SUBSTRING(address, 5, LENGTH(address)) AS substring FROM web_address;
Sådan fjerner du de sidste 4 tegn:
SELECT SUBSTRING(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Sådan fjerner du de første 4 tegn og de sidste 4 tegn:
SELECT SUBSTRING(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Løsning 3:
Sådan fjernes alle tegn før det andet '.' fra højre:
SELECT SUBSTRING_INDEX(address, '.', -2) AS substring FROM web_address;
For at fjerne alle tegn efter den anden '.' fra venstre:
SELECT SUBSTRING_INDEX(address, '.', 2) AS substring FROM web_address;
For at fjerne alle tegn efter det andet '.' fra venstre, fjern derefter alle tegn før det første '.' fra højre:
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(address, '.', 2), '.', -1 ) AS substring FROM web_address;
Resultatet er:
understreng |
---|
eksempel |
learnsql |
Diskussion:
Den første og den anden løsning fjerner begge et specificeret antal tegn fra teksten med SUBSTR()
eller SUBSTRING()
fungere. SUBSTR()
er et synonym for SUBSTRING()
. De kræver begge strengen og startpositionen som argumenter. Det sidste argument, som definerer antallet af tegn, der skal udtrækkes, er valgfrit. Hvis det sidste argument udelades, vil hele strengen (fra startpunktet) blive returneret.
I den tredje løsning er SUBSTRING_INDEX()
funktionen fjerner teksten før eller efter de angivne tegn. Det kræver som argumenter strengen, tegnet og hvor mange forekomster af tegnet der skal stødes på, til hvor tekstudtrækket starter.