Problem:
Du vill dela en sträng i MySQL.
Exempel:
Vår databas har en tabell som heter Student
med data i kolumnerna id
och name
.
id | namn |
---|---|
1 | Ann Smith |
2 | Mark Twain |
3 | Brad Green |
Låt oss hämta data från kolumnnamnet och dela upp den i firstname
och lastname
.
Lösning:
Vi använder SUBSTRING_INDEX()
fungera. Här är frågan:
SELECT SUBSTRING_INDEX(name,' ',1) AS firstname, SUBSTRING_INDEX(name,' ',-1) AS lastname FROM Student
Här är resultatet av frågan:
förnamn | efternamn |
---|---|
Ann | Smith |
Markera | Twain |
Brad | Grön |
Diskussion:
Funktionen SUBSTRING_INDEX()
tar 3 argument:källsträngen, avgränsaren och antalet förekomster av avgränsaren.
Källsträngen är strängen som vi skulle vilja dela.
avgränsaren är en teckensträng som SUBSTRING_INDEX()
funktion letar efter i källsträngen. När den hittas indikerar den platsen där delsträngen slutar. Avgränsaren kan vara ett enstaka tecken såsom ett mellanslag, men det kan också vara ett mönster som består av två eller flera tecken. Detta mönster är skiftlägeskänsligt; det vill säga det spelar roll om de givna tecknen är stora eller små bokstäver. Kom ihåg att avgränsaren är en sträng, så den måste skrivas med citattecken ('').
Det sista argumentet är antalet förekomster . Den indikerar antalet gånger avgränsningsmönstret måste matchas. Observera att antalet förekomster kan vara ett negativt värde. När den är negativ räknar vi förekomsterna av avgränsaren från höger. När räkningen är ett positivt tal, räknar vi från vänster.
Funktionen matar ut varje tecken i källsträngen tills avgränsaren matchar antalet gånger som ges av antalet förekomster.
Om vi kör följande fråga:
SELECT SUBSTRING_INDEX('Ann Smith',' ',1);
utgången blir:
Ann
Som du kan se returnerade funktionen alla tecken tills det första utrymmet från vänster hittades.
I vårt exempel hämtar vi som elevens förnamn alla tecken upp till första blanksteg från vänster och som elevens efternamn alla tecken upp till första blanksteg från höger.