@マークBは近かった。 MySQLでは、次のステートメントは12を返します:
SELECT CHAR_LENGTH("Have_a_good_day") - LOCATE('_', REVERSE("Have_a_good_day"))+1;
値の使用の可能性を予測して、次のステートメントは、最後のアンダースコア(つまり、_)の前の文字列の左側の部分を抽出します。
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last")));
結果は「first_middle」です。区切り文字を含める場合は、次を使用します:
SELECT LEFT("first_middle_last", CHAR_LENGTH("first_middle_last") - LOCATE('_', REVERSE("first_middle_last"))+1);
LOCATEを拡張して、右から検索を開始するオプションがあると便利です。
最後のスペースの後に文字列の正しい部分が必要な場合、より良い解決策は次のとおりです。
SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);
これは「最後」を返します。