sql >> Database teknologi >  >> RDS >> Mysql

Sådan opdeles en streng i MySQL

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.


  1. Beskytter mysql_real_escape_string() FULDSTÆNDIG mod SQL-injektion?

  2. Hvilke ressourcer findes der til justering af databasens ydeevne?

  3. Er vi klar til Nordic PGDay?

  4. PostgreSQL-sekvens baseret på en anden kolonne