0

私はtableこのような単純なものを持っているとしましょう:

id    |    name
1     |    one_word
2     |    two words
3     |    here we have four

したがって、1つの単語を含む行のみを取得したいと思います。上記の例では、idのレコードのみになります2

私はドキュメントを読み、これのさまざまなバージョンを試しました:

SELECT * FROM `table` WHERE name REGEXP '(.*?)\s'; 

だから、どこが間違っているのか教えてください。

4

3 に答える 3

0

これはどうですか?どちらLIKE '% %'REGEXP場合も、パフォーマンスは良くありません。しかし、パフォーマンスの低下は最も少ないと思いますLIKE

SELECT * FROM `table` WHERE name NOT LIKE '% %'
于 2013-01-26T16:55:02.800 に答える
0

ストロベリーからのコメントに感謝します、私はこれを思いつきました:

SELECT * FROM `table` WHERE name NOT REGEXP '\s'

これはうまくいきます。

于 2013-01-26T16:52:16.503 に答える
0

より多くの単語が含まれている可能性のある列の最初の単語を探している場合は、SUBSTRING_INDEXを使用できます。

SELECT SUBSTRING_INDEX("here we have four", " ", 1)

スペースのない行を抽出するには、たとえば次のように使用できます。

  • name NOT REGEXP '\s'
  • name NOT LIKE '% %'
  • LOCATE(' ', name) = 0

列の先頭または末尾にスペースを含めることができる場合は、TRIMを使用することもできます。

SELECT SUBSTRING_INDEX(TRIM("  here we have four  "), " ", 1)
  • TRIM(name) NOT REGEXP '\s'
  • TRIM(name) NOT LIKE '% %'
  • LOCATE(' ', TRIM(name)) = 0
于 2013-01-26T16:59:38.023 に答える