Problem:
Du vil gerne opdele en streng i MySQL.
Eksempel:
Vores database har en tabel med navnet Student
med data i kolonnerne id
og name
.
id | navn |
---|---|
1 | Ann Smith |
2 | Mark Twain |
3 | Brad Green |
Lad os hente dataene fra kolonnenavnet og opdele dem i firstname
og lastname
.
Løsning:
Vi bruger SUBSTRING_INDEX()
fungere. Her er forespørgslen:
SELECT SUBSTRING_INDEX(name,' ',1) AS firstname, SUBSTRING_INDEX(name,' ',-1) AS lastname FROM Student
Her er resultatet af forespørgslen:
fornavn | efternavn |
---|---|
Ann | Smith |
Mark | Twain |
Brad | Grøn |
Diskussion:
Funktionen SUBSTRING_INDEX()
tager 3 argumenter:kildestrengen, afgrænsningstegnet og antallet af forekomster af skilletegnet.
Kildestrengen er den streng, som vi gerne vil dele.
afgrænsningen er en streng af tegn, som SUBSTRING_INDEX()
funktion søger i kildestrengen. Når den er fundet, angiver den det sted, hvor understrengen slutter. Afgrænsningstegnet kan være et enkelt tegn såsom et mellemrum, men det kan også være et mønster, der består af to eller flere tegn. Dette mønster skelner mellem store og små bogstaver; det vil sige, at det har betydning, om de givne tegn er store eller små bogstaver. Husk, at afgrænsningstegnet er en streng, så det skal skrives i anførselstegn ('').
Det sidste argument er antallet af forekomster . Det angiver det antal gange, afgrænsningsmønsteret skal matches. Bemærk, at antallet af forekomster kan være en negativ værdi. Når den er negativ, tæller vi forekomsterne af afgrænseren fra højre. Når tallet er et positivt tal, tæller vi fra venstre.
Funktionen udsender hvert tegn i kildestrengen, indtil afgrænsningstegnet matches med antallet af gange givet af forekomstantallet.
Hvis vi kører følgende forespørgsel:
SELECT SUBSTRING_INDEX('Ann Smith',' ',1);
outputtet vil være:
Ann
Som du kan se, returnerede funktionen alle tegnene, indtil det første mellemrum fra venstre blev fundet.
I vores eksempel henter vi som elevens fornavn alle tegn op til det første mellemrum fra venstre og som elevens efternavn alle tegnene op til det første mellemrum fra højre.