@Marc B était proche. Dans MySQL, l'instruction suivante renvoie 12 :
SELECT CHAR_LENGTH("Have_a_good_day") - LOCATE('_', REVERSE("Have_a_good_day"))+1;
Anticipant une utilisation possible de la valeur, l'instruction suivante extrait la partie gauche de la chaîne avant le dernier trait de soulignement (c'est-à-dire _) :
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last")));
Le résultat est "premier_milieu". Si vous souhaitez inclure le délimiteur, utilisez :
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last"))+1);
Ce serait bien s'ils amélioraient LOCATE pour avoir une option pour démarrer la recherche à partir de la droite.
Si vous voulez la partie droite de la chaîne après le dernier espace, une meilleure solution est :
SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);
Cela renvoie "dernier".