MySQLのスペースの前にあるすべての文字を取得する


81

スペースの前のフィールドのすべての文字を取得したい

例えば、場合がfield1あります"chara ters"

返して欲しい "chara"

このselectステートメントはどのようになりますか?

回答:


115

SELECT LEFT(field1,LOCATE(' ',field1) - 1)

問題の文字列にスペースが含まれていない場合、空の文字列が返されることに注意してください。


6
末尾にスペースを入れて「chara」を返します。最後にセパレータが必要ない場合は、LOCATEの結果を減らす必要があります。SELECTLEFT(field1、LOCATE( ''、field1)-1)
Enyby 2014年

1
メインフィールドにスペースが含まれていない場合、これは機能しません。部分文字列は、文字列全体を返すのではなく、空の値を返します。たとえば、フィールドに文字列「test-possible-incorrect-name」が含まれている場合、部分文字列は「test-possible-incorrect-name」の代わりに何も返しません。
Swapnil Gangrade 2017年

2
@SwapnilGangrade実際のユースケースに応じて、予想される動作かどうかがわかります。文字列にスペースがない場合、スペースの前に文字がないため、空の文字列を返す必要があると主張する人もいるかもしれません。このような場合、別の人が文字列全体を返したい場合があります。この質問では、このエッジケースで関数がどのように動作するかを指定していません。答えを更新して強調します。
Mchl 2017年

11
次にselect SUBSTRING_INDEX( field1, ' ', 1 ) from table;、スペースがない場合に完全な文字列が必要な場合に選択します。
Swapnil Gangrade 2017年

2
以下の(SUBSTRING_INDEX)の答えは、空白値になるのではなく、区切り文字を含まない値を保持するため、一般的な解決策として「より良い」です。
退化

88

以下は、機能する別の方法であり、一部の人にとっては少し簡単に見えるかもしれません。SUBSTRING_INDEXMySQL関数を使用します。1は最初のスペースの前のすべてを返し、-1は最後のスペースの後のすべてを返します。

これは 'chara'を返します:

SELECT SUBSTRING_INDEX( field1, ' ', 1 )

これは 'ters'を返します:

SELECT SUBSTRING_INDEX( field1, ' ', -1 )

詳細

正の値は文字列の先頭から指定された文字を検索し、負の値は文字列の末尾から開始します。数値の値は、文字列の残りの部分を返す前に検索する指定された文字の量を示します。検索している文字が存在しない場合は、フィールド値全体が返されます。

この場合、-2は最後から2番目のスペースの右側にあるすべてを返しますが、これはこの例には存在しないため、フィールド値全体が返されます。


3
これは、空白のない文字列がある場合にも機能します。たとえば、「chara」も機能します。
bernhardh 2015年

2
これは、xyzコンポーネントを含むバージョン文字列のメジャーバージョンとマイナーバージョンを取得するのに役立ちました。
thomthom 2016年

4
これは、文字が見つからなかった場合にフィールド全体を返す場合に最適です。
stephentgrammer 2017

これを使用して、区切り文字(コンマ)が存在することが保証されている文字列フィールドから地理座標を抽出します。
ob-ivan 2018

11

そのためには、いくつかの文字列操作が必要になります。すべてのフィールドに少なくとも1つのスペース文字があると仮定します。

SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;

安全なアプローチ:

SELECT IF(
    LOCATE(' ', field1),
    SUBSTR(field1, 0, LOCATE(' ', field1)),
    field1
) FROM your_table;

安全なバージョンの場合は+1。ただし、フィールドに空白が含まれていない場合に返される結果は明確ではありません。
Mchl 2010

2
1のために変更を0に持っていた:SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;
リュイス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.