@Marc B estava perto. No MySQL, a seguinte instrução retorna 12:
SELECT CHAR_LENGTH("Have_a_good_day") - LOCATE('_', REVERSE("Have_a_good_day"))+1;
Antecipando um possível uso do valor, a instrução a seguir extrai a parte esquerda da string antes do último sublinhado (ou seja, _):
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last")));
O resultado é "first_middle". Se você quiser incluir o delimitador, use:
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last"))+1);
Seria bom se eles aprimorassem o LOCATE para ter uma opção para iniciar a pesquisa pela direita.
Se você quiser a parte certa da string após o último espaço, uma solução melhor é:
SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);
Isso retorna "último".