Come faccio a utilizzare un campo booleano in una clausola in cui a SQLite?

StackOverflow https://stackoverflow.com/questions/580668

  •  06-09-2019
  •  | 
  •  

Domanda

Sembra una domanda stupida, eppure. Potrebbe essere il mio IDE che mi ha scherzano su. Ecco il codice (questo è generato da DbLinq):

SELECT  pics$.Caption, pics$.Id, pics$.Path, pics$.Public, pics$.Active, portpics$.PortfolioID
FROM main.Pictures pics$
inner join main.PortfolioPictures portpics$    on  pics$.Id = portpics$.PictureId

WHERE   portpics$.PortfolioId = 1 AND pics$.Id > 0
--AND pics$.Active = 1 AND pics$.Public = 1
ORDER BY pics$.Id

Se corro questa query ottengo tre file indietro, con due campi booleani chiamati attivo e pubblico. L'aggiunta della linea commentata non restituisce alcuna riga. Cambiare la linea per una delle seguenti:

pics$.Active = 'TRUE'
pics$.Active = 't' 
pics$.Active =  boolean(1)

Non funziona. Sia gli errori o nessun risultato. Googled per questo e ho trovato una carenza di query SQL effettivi là fuori. Ed eccoci qui.

Quindi: Come si usa un campo booleano in una clausola dove nel SQLite

?

IDE è amministratore SQLite.

Aggiorna : Beh, ho trovato la risposta. SQLite amministratore vi permetterà di fare il backup dei propri tipi apparentemente; la creazione di SQL che ottiene sguardi generate in questo modo:

CREATE TABLE [Pictures] ([Id] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
[Path] VARCHAR(50)  UNIQUE NOT NULL,[Caption] varchAR(50)  NULL,
[Public] BOOLEAN DEFAULT '0' NOT NULL,[Active] BOOLEAN DEFAULT '1' NOT NULL)

La correzione per la query è

AND pics$.Active = 'Y' AND pics$.Public = 'Y'

Il vero problema qui è, come la prima risposto sottolineato, non v'è alcun tipo booleano in SQLite. Non è un problema, ma qualcosa di essere a conoscenza. Sto utilizzando DbLinq per generare il mio livello di dati; forse non dovrebbe permettere la mappatura dei tipi che SQLite non supporta. O dovrebbe mappare tutti i tipi che non sono nativi SQLite per un tipo stringa.

È stato utile?

Soluzione

SQLite non ha il tipo booleano: Quali tipi di dati supportati da SQLite

La linea commentata-out come è dovrebbe funzionare, basta usare valori interi di 1 e 0 nei dati per rappresentare un valore booleano.

Altri suggerimenti

Non è necessario utilizzare qualsiasi operatore di confronto al fine di confrontare un valore booleano in cui clausola.

Se la colonna 'booleana' prende il nome is_selectable, il tuo clausola dove sarebbe semplicemente: WHERE is_selectable

SQLite non ha alcun tipo booleano integrato - è necessario utilizzare un intero posto. Inoltre, quando si sta confrontando il valore di 'VERO' e 't', si sta confrontando a quei valori come stringhe, non come booleani o interi, e quindi il confronto sarà sempre esito negativo.

Fonte: http://www.sqlite.org/datatype3.html

-> questo vi darà Risultato avendo valore falso di campo is_online

select * from device_master dove is_online! = 1

-> questo vi darà Risultato avendo vero valore di campo is_online

select * from device_master dove is_online = 1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top