Problém:
Chtěli byste rozdělit řetězec v MySQL.
Příklad:
Naše databáze obsahuje tabulku s názvem Student
s údaji ve sloupcích id
a name
.
id | jméno |
---|---|
1 | Ann Smith |
2 | Mark Twain |
3 | Brad Green |
Načteme data z názvu sloupce a rozdělíme je na firstname
a lastname
.
Řešení:
Použijeme SUBSTRING_INDEX()
funkce. Zde je dotaz:
SELECT SUBSTRING_INDEX(name,' ',1) AS firstname, SUBSTRING_INDEX(name,' ',-1) AS lastname FROM Student
Zde je výsledek dotazu:
křestní jméno | příjmení |
---|---|
Ann | Smith |
Označit | Twain |
Brad | Zelená |
Diskuse:
Funkce SUBSTRING_INDEX()
přebírá 3 argumenty:zdrojový řetězec, oddělovač a počet výskytů oddělovače.
zdrojový řetězec je řetězec, který bychom chtěli rozdělit.
Oddělovač je řetězec znaků, které SUBSTRING_INDEX()
funkce hledá ve zdrojovém řetězci. Když je nalezen, označuje místo, kde končí podřetězec. Oddělovačem může být jeden znak, například mezera, ale může to být také vzor, který se skládá ze dvou nebo více znaků. Tento vzor rozlišuje malá a velká písmena; tedy záleží, zda jsou dané znaky velká nebo malá. Pamatujte, že oddělovač je řetězec, takže musí být napsán v uvozovkách (‘‘).
Posledním argumentem je počet výskytů . Udává, kolikrát je třeba sladit vzor oddělovače. Všimněte si, že počet výskytů může být záporná hodnota. Když je záporné, počítáme výskyty oddělovače zprava. Když je počet kladné číslo, počítáme zleva.
Funkce vypíše každý znak zdrojového řetězce, dokud se oddělovač neshoduje s počtem výskytů daným počtem výskytů.
Pokud spustíme následující dotaz:
SELECT SUBSTRING_INDEX('Ann Smith',' ',1);
výstup bude:
Ann
Jak můžete vidět, funkce vrátila všechny znaky, dokud nebyla nalezena první mezera zleva.
V našem příkladu získáme jako křestní jméno studenta všechny znaky až po první mezeru zleva a jako příjmení studenta všechny znaky až po první mezeru zprava.