web-dev-qa-db-ja.com

SQLiteクエリ、 'LIKE'

データベースから情報を取得しようとしています。
Lim Won MongLimitedなどの単語があります。

クエリSELECT name FROM memberdb WHERE name LIKE '%LIM%'を実行すると、Lim Won MongLimitedの両方が表示され、Lim Won Mongからのデータのみが必要です。

クエリをどのように書き換えればよいですか?

16
Lene

次のクエリを実行します。

select name from memberdb where name like '% LIM %' OR name like "LIM %" OR name like "% LIM" OR name like "LIM"
39
jeet

「lim」という単語に一致させる場合(つまり、「a lim」、「lim a」、「a lim a」、および「lim」に一致するが、「limit」または「alim」には一致しない)、 SQL REGEXPキーワードを使用し、Wordの境界([[:<:]]および[[:>:]])。これらは、空白(スペース、タブ、改行)、文字列の開始/終了、およびいくつかの句読点にも一致します。

このようなもの:

SELECT name FROM memberdb WHERE name REGEXP '[[:<:]]LIM[[:>:]]'

REGEXPは大文字と小文字を区別しないことに注意してください(バイナリ文字列を使用する場合を除く)。

スペースのみに一致させる場合は、REGEXPを使用できます。これは、文字列の先頭またはスペース、次に「lim」、次にスペースまたは文字列の末尾のいずれかに一致します。

SELECT name FROM memberdb WHERE name REGEXP '(^| )LIM( |$)'

両方のソリューションは、REGEXPをサポートするSQLバージョンでテストされています(SQLite 3 +、Androidはすべて3.5.9以降を使用)。

4
Eric

これを試してください:

SELECT name 
FROM MEMBERDB 
WHERE name LIKE 'LIM %' OR name LIKE '% LIM'
OR name LIKE '% LIM %' OR name LIKE 'LIM';

次のようなデータがあるとします。

'LIMITED'
'Lim Won Mong'
'Wang Tat Lim'
'ELIM TED'
'lim'
'Wang LIM tim'

このクエリは、次のデータのみを返します。

'Lim Won Mong'
'Wang Tat Lim'
'lim'
'Wang LIM tim'

このSQLFiddleを参照

3
hims056