I MariaDB kan du använda SUBSTRING_INDEX()
funktion för att returnera allt före eller efter ett visst tecken (eller tecken) i en sträng.
Denna funktion accepterar tre argument; strängen, avgränsaren och antalet förekomster av den avgränsaren som ska användas för att avgöra vilken delsträng som ska returneras.
Exempel
Vi kan se hur funktionen fungerar i följande exempel.
Välj allt före
För att markera allt före ett visst tecken, gör det tredje argumentet till ett positivt värde:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', 2);
Resultat:
Red,Green
I det här exemplet markerar vi allt före det andra kommatecken. Detta görs med hjälp av ett kommatecken (,
) som avgränsare och 2
som räkning.
Jag använde ett kommatecken i det exemplet, men det kunde ha varit vilket tecken eller sträng som helst:
SELECT SUBSTRING_INDEX('Red or Green or Blue', ' or ', 2);
Resultat:
Red or Green
Välj allt efter
Använd ett negativt värde för att markera allt efter ett visst tecken:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', -2);
Resultat:
Green,Blue
Observera att det negativa värdet betyder att det räknas in från höger, välj sedan delsträngen till höger om avgränsaren.
När avgränsaren inte hittas
Om avgränsaren inte hittas i strängen, returneras strängen i sin helhet.
Exempel:
SELECT SUBSTRING_INDEX('Red,Green,Blue', '-', 1);
Resultat:
Red,Green,Blue
I det här fallet returneras hela strängen i sin helhet eftersom vi använde ett bindestreck (-
) som avgränsare men det fanns inga bindestreck i strängen.
Vi skulle få samma resultat om strängen gör det innehåller avgränsaren, men vårt count
överskrider antalet avgränsare i strängen.
Exempel:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', 10);
Resultat:
Red,Green,Blue
Skiftlägeskänslighet
SUBSTRING_INDEX()
funktionen utför en skiftlägeskänslig sökning efter avgränsaren. Det vill säga att avgränsaren måste vara rätt skiftläge innan den matchar.
Felaktigt fall
Här är ett exempel där fallet inte matchar:
SELECT SUBSTRING_INDEX('Red and green and blue', 'AND', 2);
Resultat:
Red and green and blue
Vi får hela strängen i sin helhet.
Rätt fall
Här är samma exempel, men där fallet matchar:
SELECT SUBSTRING_INDEX('Red and green and blue', 'and', 2);
Resultat:
Red and green