@Marc B era vicino. In MySQL, la seguente istruzione restituisce 12:
SELECT CHAR_LENGTH("Have_a_good_day") - LOCATE('_', REVERSE("Have_a_good_day"))+1;
Anticipando un possibile utilizzo del valore, la seguente istruzione estrae la parte sinistra della stringa prima dell'ultimo underscore (es. _):
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last")));
Il risultato è "first_middle". Se vuoi includere il delimitatore, usa:
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last"))+1);
Sarebbe bello se migliorassero LOCATE per avere un'opzione per iniziare la ricerca da destra.
Se vuoi la parte destra della stringa dopo l'ultimo spazio, una soluzione migliore è:
SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);
Questo restituisce "ultimo".