1. ホーム
  2. mysql

MySQLで指定された部分文字列の最後のインデックス

2023-08-19 16:25:46

質問

MySQL で指定された部分文字列の最初の出現のインデックスを見つけるには INSTR() 関数を使用して、次のように見つけることができます。

SELECT instr('Have_a_good_day', '_') AS index_position

と表示されます。 5 と表示され、指定された部分文字列(この場合はアンダースコア)の最初の出現は _ .

与えられた文字(または部分文字列)の最後の出現箇所を取得したいのですが、Javaのような lastIndexOf(String str) メソッドのようなものを取得する必要がありますが、MySQL では組み込み関数を見つけることができません。

MySQL でこれを達成するための組み込み機能はありますか?

どのように解決するのですか?

Marc 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);

これは "last"を返します。