2016-05-28 12 views
5

Ho una tabella in cui una colonna è una stringa con tre caratteri, ogni carattere ha un valore 0 o 1. Vorrei selezionare quelle righe in base al caso.La query con LIKE non funziona con GreenDAO

mi piacerebbe per eseguire una query del genere:

SELECT * FROM Item WHERE group_type LIKE ? 

? può essere 100 o 101 o 011 o 111 o 001. Una combinazione con 0 e 1 in tre caratteri.

Sto cercando di query utilizzando COME

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 sta tornando tutto ciò che inizia con 1 come previsto. case3 restituisce tutto ciò che termina con 1 come previsto. case2 restituisce tutto! Non importa il valore all'inizio, al centro o alla fine. Sta restituendo tutto.

case1 e case3 funzionano correttamente. Tuttavia, case2 non funziona. C'è qualche problema con quello?

+1

È necessario approfondire come esattamente il case2 non funziona? Qual è l'output ..? – Vucko

+0

Ho modificato la mia domanda. Si prega di dare un'occhiata –

+0

Beh, c'è da aspettarsi, ognuno di questi numeri contiene un 1. Non significa che ** deve ** avere qualcosa prima e dopo di esso,% 1% significa che può, ma non deve avere qualcosa prima e dopo. – Vucko

risposta

0

No. "% 1%" deve restituire tutto in cui si verifica "1". Può essere "100", "010" o "101", ma non "000".

0

Dalla pagina sqlite like clause di riferimento:

Il segno di percentuale rappresenta zero, uno, o più numeri o caratteri. Il trattino basso rappresenta un singolo numero o carattere. Questi simboli possono essere usati in combinazioni.

Dicendo %1% siete alla ricerca di elementi che hanno almeno un numero 1, indipendentemente da dove possa essere. Ciò è dovuto principalmente al fatto che% significa zero, una o più occorrenze. Questo è ulteriormente spiegata in quel collegamento dal seguente esempio:

WHERE STIPENDIO LIKE '% 200%'

Finds tutti i valori che hanno 200 in qualsiasi posizione

in modo che possiamo vedi che in effetti stai ottenendo il comportamento previsto.

Problemi correlati