2016-05-28 5 views
5

Ich habe eine Tabelle, die eine Spalte ist eine Zeichenfolge mit drei Zeichen, jedes Zeichen hat einen Wert 0 oder 1. Ich möchte diese Zeilen entsprechend dem Fall auswählen.Abfrage mit LIKE funktioniert nicht mit GreenDAO

Ich möchte eine Abfrage wie das auszuführen:

SELECT * FROM Item WHERE group_type LIKE ? 

? kann 100 oder 101 oder 011 oder 111 oder 001 sein. Eine Kombination mit 0 und 1 in drei Zeichen.

Ich versuche, mit 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 kehrt alles abzufragen, die wie erwartet mit 1 beginnt. case3 gibt alles zurück, was wie erwartet mit 1 endet. case2 gibt alles zurück! Es wird nicht der Wert am Anfang, in der Mitte oder am Ende bestimmt. Es gibt alles zurück.

Fall1 und Fall3 funktionieren gut. Case2 funktioniert jedoch nicht. Gibt es ein Problem damit?

+1

Sie müssen mehr darüber ausarbeiten, wie genau die case2 nicht funktioniert? Was ist der Ausgang ..? – Vucko

+0

Ich habe meine Frage bearbeitet. Bitte schauen Sie sich –

+0

Nun, das ist zu erwarten, jede dieser Zahlen enthält eine 1. Es bedeutet nicht, dass es ** etwas davor und danach haben muss,% 1% bedeutet, dass es kann, muss aber nicht habe etwas vorher und nachher. – Vucko

Antwort

0

Nein. "% 1%" soll alles zurückgeben, wo "1" auftritt. Es kann "100", "010" oder "101", aber nicht "000" sein.

0

Vom sqlite like clause Referenzseite:

Das Prozentzeichen steht Null, ein oder mehr Zahlen oder Zeichen. Der Unterstrich steht für eine einzelne Zahl oder ein einzelnes Zeichen. Diese Symbole können in Kombinationen verwendet werden.

von %1% sagen Sie Elemente suchen, die unabhängig mindestens eine Nummer 1, haben, wo es sein kann. Dies liegt hauptsächlich daran, dass% null, ein oder mehrere Vorkommen bedeutet. Dies wird in dieser Verbindung durch das folgende Beispiel erläutert:

WHERE GEHALT LIKE '% 200%'

alle Werte fest, dass 200 in jeder Position haben

So können wir Sehen Sie, dass Sie tatsächlich das erwartete Verhalten bekommen.