問題:
MySQLで文字列を分割したい。
例:
私たちのデータベースには、Student
id
列にデータがあります およびname
。
id | 名前 |
---|---|
1 | アンスミス |
2 | マークトウェイン |
3 | ブラッドグリーン |
列名からデータを取得して、firstname
に分割してみましょう。 およびlastname
。
解決策:
SUBSTRING_INDEX()
を使用します 働き。クエリは次のとおりです:
SELECT SUBSTRING_INDEX(name,' ',1) AS firstname, SUBSTRING_INDEX(name,' ',-1) AS lastname FROM Student
クエリの結果は次のとおりです。
名 | 姓 |
---|---|
アン | スミス |
マーク | トウェイン |
ブラッド | 緑 |
ディスカッション:
関数SUBSTRING_INDEX()
ソース文字列、区切り文字、および区切り文字の出現回数の3つの引数を取ります。
ソース文字列 分割したい文字列です。
区切り文字 SUBSTRING_INDEX()
が使用する文字列です。 関数はソース文字列を検索します。見つかった場合、それは部分文字列が終了する場所を示します。区切り文字は、スペースなどの単一の文字にすることができますが、2つ以上の文字で構成されるパターンにすることもできます。このパターンでは大文字と小文字が区別されます。つまり、指定された文字が大文字であるか小文字であるかが重要です。区切り文字は文字列であるため、引用符(‘’)で記述する必要があることに注意してください。
最後の引数は発生回数です 。区切り文字パターンを一致させる必要がある回数を示します。発生回数は負の値になる可能性があることに注意してください。負の場合は、区切り文字の出現回数を右から数えます。カウントが正の数の場合、左からカウントします。
この関数は、区切り文字が出現回数で指定された回数と一致するまで、ソース文字列のすべての文字を出力します。
次のクエリを実行した場合:
SELECT SUBSTRING_INDEX('Ann Smith',' ',1);
出力は次のようになります:
Ann
ご覧のとおり、関数は左から最初のスペースが見つかるまですべての文字を返しました。
この例では、左から最初のスペースまでのすべての文字を生徒の名前として取得し、右から最初のスペースまでのすべての文字を生徒の名前として取得します。