sql >> Databasteknik >  >> RDS >> Mysql

Sista indexet för en given delsträng i MySQL

@Marc B var nära. I MySQL returnerar följande uttalande 12:

SELECT CHAR_LENGTH("Have_a_good_day") - LOCATE('_', REVERSE("Have_a_good_day"))+1;

För att förutse en möjlig användning av värdet extraherar följande sats den vänstra delen av strängen före det sista understrecket (dvs. _):

SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last")));

Resultatet är "first_middle". Om du vill inkludera avgränsaren, använd:

SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last"))+1);

Det skulle vara trevligt om de förbättrade LOCATE för att ha ett alternativ att starta sökningen från höger.

Om du vill ha rätt del av strängen efter det sista mellanslag är en bättre lösning:

SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);

Detta returnerar "sista".



  1. Ta bort, uppdatera med härledda tabeller?

  2. Är kolumn- och tabellnamn skiftlägeskänsliga i MySQL?

  3. Hur man lagrar data som innehåller citat i MySQL

  4. Är dessa två funktioner överdrivna för sanering?