@Marc B estuvo cerca. En MySQL, la siguiente declaración devuelve 12:
SELECT CHAR_LENGTH("Have_a_good_day") - LOCATE('_', REVERSE("Have_a_good_day"))+1;
Anticipando un posible uso del valor, la siguiente declaración extrae la parte izquierda de la cadena antes del último guión bajo (es decir, _):
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last")));
El resultado es "first_middle". Si desea incluir el delimitador, use:
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last"))+1);
Sería bueno si mejoraran LOCATE para tener una opción para iniciar la búsqueda desde la derecha.
Si desea la parte correcta de la cadena después del último espacio, una mejor solución es:
SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);
Esto devuelve "último".