2016-05-28 1 views
5

私は、列が3文字の文字列であり、各文字の値が0または1であるテーブルを持っています。LIDAを使用したクエリがGreenDAOを使用していません

私はそのようなクエリを実行したいと思います:

SELECT * FROM Item WHERE group_type LIKE ? 

? 100または101または011または111または001にすることができます。3文字の0と1の組み合わせ。

私が使用してクエリを実行しようとしているLIKE

WhereCondition where = null; 
switch (condition) { 
    case case1: 
     where = ItemDao.Properties.GroupType.like("1%"); 
     break; 
    case case2: 
     where = ItemDao.Properties.GroupType.like("%1%"); 
     break; 
    case case3: 
     where = ItemDao.Properties.GroupType.like("%1"); 
     break; 
} 
List<Item> items = itemDao.queryBuilder().where(where).list(); 

CASE1は予想通り1で始まるすべてのものを返しています。 case3は、期待通りに1で終わるものすべてを返しています。 case2がすべてを返しています!中途半端なやり方では価値を測ることはできません。それはすべてを返す。

case1とcase3は正常に動作しています。ただし、case2は機能しません。それに問題はありますか?

+1

case2がどの程度正確に機能しないのか詳しく調べる必要がありますか?出力は何ですか? – Vucko

+0

私は自分の質問を編集しました。してください見てください –

+0

それは予想される、これらの数字のそれぞれには1が含まれています。それはそれが前後に何かを持っている必要があります**%1​​%はできることを意味しますが、する必要はありません前後に何かがある。 – Vucko

答えて

0

いいえ「%1%」は、「1」が発生するすべてのものを返すと想定されています。 「100」、「010」、「101」は可能ですが、「000」ではありません。

0

sqlite like clause基準ページから:

%記号はゼロ、1つ、または複数数字や文字を表します。アンダースコアは単一の数字または文字を表します。これらのシンボルは組み合わせて使用​​できます。

%1%と言って、少なくとも1つの番号1を持つ要素を探しています(その場所に関係なく)。これは主に%が0回、1回または複数回の発生を意味するためです。これは、以下の実施例によりさらにそのリンクで説明されています。

SALARY LIKE「%200%」

は、任意の位置に

だから我々はできるが200 を持っている任意の値を検索します

確かにあなたが期待された動作を得ているのを見てください。

関連する問題