web-dev-qa-db-ja.com

単語全体のみをLIKEと一致させますか?

したがって、docは部分文字列であるため、 'awesome document' LIKE '%doc%'はtrueです。しかし、「awesome doc」、「doc awesome」、「awesome doc awesome」が真である必要があるのに対し、私はそれを偽にしたいのです。どうすればいいねでできますか?

私はsqliteを使用しているので、利用できないものを使用する必要がないことを願っています。

22
Abhinav Sharma

それを4つの部分に分割するのはどうですか-

[MyColumn] Like '% doc %' 
OR [MyColumn] Like '% doc' 
OR [MyColumn] Like 'doc %' 
OR [MyColumn] = 'doc'

編集:別のアプローチ(ASCII文字のみ)は​​次のようになります:

'#'+[MyColumn]+'#' like '%[^a-z0-9]doc[^a-z0-9]%'

(特別な文字も処理することをお勧めします)

のようには見えませんが、状況に適している場合は、 全文検索 および 含む を調べることをお勧めします。

参照: MSDN:[](ワイルドカード-一致する文字)(Transact-SQL)

32
YetAnotherUser
WHERE (@string LIKE 'doc %' OR @string LIKE '% doc' OR @string LIKE '% doc %' OR @string = 'doc')
8
FishBasketGordo

以下の条件を使用できます。

(' '+YOUR_FIELD_NAME+' ') like '% doc %'

他のソリューションよりも高速に動作します。

6
Saleh Mosleh

いくつかのORを使用できます。LIKE '%doc%' OR LIKE'doc% 'OR LIKE'%doc 'OR LIKE'doc'

1
awestover89

答えはどれも私にはうまくいきませんでした(SQL Server 2008R2)。

しかし、私は以下に示す答えのいくつかを使用してそれを機能させることができました。

SELECT * FROM myTable AS v
WHERE v.Note LIKE '%[^a-zA-Z0-9]CONTainers[^a-zA-Z0-9]%'

注: v.NoteはTEXTデータ型です

これは、次のサンプルでうまくいきました。

  • コンテナ
  • コンテナ
  • コンテナ

しかし、単語「コンテナ」が他の文字や数字で囲まれている場合はそうではありません。

  • 001containers001
  • AAcontainersAA

そもそもOPが求めていたのはこれです。

0
Fandango68