sql >> Databasteknik >  >> RDS >> MariaDB

Välj allt före eller efter en viss karaktär i MariaDB

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

  1. Talk slides:Partitioneringsförbättringar i PostgreSQL 11

  2. Skicka flera uppsättningar eller matriser av värden till en funktion

  3. MySQL – MariaDB – Skriver den allra första lagrade proceduren

  4. Få en lista över alla funktioner och procedurer i en Oracle-databas