2009-02-24 5 views
21

Es scheint wie eine dumme Frage, und doch. Es könnte meine IDE sein, die mich vermasselt. Hier ist der Code (dies aus DbLinq erzeugt wird):Wie verwende ich ein boolesches Feld in einer where-Klausel in SQLite?

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 

Wenn ich diese Abfrage ausführen ich drei Reihen zurück, mit zwei Boolesche Felder Aktive und Öffentliche genannt. Wenn Sie die auskommentierte Zeile hinzufügen, werden keine Zeilen zurückgegeben. Ändern der Zeile zu einem der folgenden:

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

Es funktioniert nicht. Entweder Fehler oder keine Ergebnisse. Ich habe dafür gegoogelt und einen Mangel an tatsächlichen SQL-Abfragen gefunden. Und hier sind wir.

Also: Wie verwende ich ein boolesches Feld in einer Where-Klausel in SQLite?

IDE ist SQLite-Administrator.

Update: Nun, ich fand die Antwort. Mit SQLite Administrator können Sie offensichtlich Ihre eigenen Typen erstellen. die SQL erstellen, die wie folgt aussieht generiert wird: Ist hier

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) 

Das Update für die Abfrage ist

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

Die eigentliche Frage, wie der erste Beantworter wies darauf hin, gibt es keinen Typ boolean in SQLite . Kein Problem, aber etwas, dessen man sich bewusst sein muss. Ich verwende DbLinq, um meine Datenschicht zu generieren; Vielleicht sollte es keine Zuordnung von Typen erlauben, die SQLite nicht unterstützt. Oder es sollte alle Typen, die nicht in SQLite enthalten sind, einem String-Typ zuordnen.

Antwort

16

SQLite hat nicht den Typ boolean: What datatypes does SQLite support?

Die kommentierten-out Linie, wie es sollte funktionieren, nur ganzzahlige Werte von 1 und 0 in den Daten einen boolean darzustellen verwenden.

+4

Muss SQLite Administrator sein, der mich vermasselt.Beim Erstellen der Tabelle ist ein boolescher Typ verfügbar. Aber die Abfrage dieses Feldes liefert immer keine Ergebnisse. – jcollum

+0

siehe meine Antwort in http://stackoverflow.com/questions/4824687/how-to-include-a-boolean-in-a-sql-lite-where-clause/16880803#16880803 – Straff

4

SQLite hat keinen integrierten booleschen Typ - Sie müssen stattdessen eine ganze Zahl verwenden. Wenn Sie den Wert mit "TRUE" und "t" vergleichen, vergleichen Sie ihn mit diesen Werten als Strings, nicht als boolesche Werte oder ganze Zahlen, und daher schlägt der Vergleich immer fehl.

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

11

Sie brauchen keinen Vergleichsoperator verwenden, um einen Booleschen Wert in Ihrer where-Klausel zu vergleichen.

Wenn Ihr 'boolean' Spalte is_selectable genannt wird, Ihre where-Klausel würde einfach sein: WHERE is_selectable

+0

Was ist das Gegenteil davon? Wenn Sie versuchen, diejenigen zu finden, die ** nicht auswählbar waren **. –

+2

WHERE NOT (is_selectable) –

+0

Genau das, was ich brauchte, danke @AviCherry –

-1

-> Dies wird Ihnen Falsch-Wert von is_online Feld mit Geben Ergebnis

select * from device_master ! wo is_online = 1

-> Dies wird Ihnen wahren Wert is_online Feld mit geben Ergebnis

Wählen Sie * aus device_master where is_online = 1

Verwandte Themen