Frage

Es scheint wie eine dumme Frage, und doch. Es könnte mein IDE sein, die mich nach oben sind vermasseln. Hier ist der Code (dies aus DbLinq erzeugt wird):

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. Hinzufügen in den Kommentaren aus Zeile gibt keine Zeilen zurück. Ändern der Linie zu einer der folgenden Eigenschaften:

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

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

Also: Wie verwende ich ein Booleschen Feld in einer where-Klausel in SQLite

?

IDE ist SQLite Administrator.

Aktualisieren : Nun, fand ich die Antwort. SQLite Administrator können Sie Ihre eigenen Arten offenbar machen; das Erstellen von SQL, die generiert sieht wie folgt erhält:

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'

Das eigentliche Problem hier ist, wie der erste Beantworter wies darauf hin, gibt es keinen Typen boolean in SQLite. Kein Problem, sondern etwas bewusst zu sein. Ich bin mit DbLinq meine Datenschicht zu erzeugen; vielleicht sollte es nicht Zuordnung von Typen ermöglichen, die SQLite nicht unterstützt. Oder sollte es alle Arten zuordnen, die nicht heimisch sind in einen String Typ SQLite.

War es hilfreich?

Lösung

SQLite hat nicht den Typ boolean: Welche Datentypen SQLite Unterstützung bietet

Die kommentierten-oute Linie, wie es ist funktionieren soll, nur ganzzahlige Werte von 1 und 0 in Ihren Daten verwenden, um einen Booleschen darstellen.

Andere Tipps

Sie brauchen keinen Vergleichsoperator zu 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

SQLite hat keinen eingebauten in boolean Typen - Sie haben stattdessen eine ganze Zahl zu verwenden. Auch wenn Sie den Wert sind im Vergleich zu ‚TRUE‘ und ‚t‘, bist du es auf diese Werte als Zeichenfolgen, nicht als Boolesche Werte oder ganze Zahlen, und daher wird der Vergleich immer scheitern zu vergleichen.

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

-> Diese geben Sie Ergebnis mit Falsch-Wert von is_online Feld

select * from device_master wo is_online! = 1

-> Diese geben Sie Ergebnis mit True Value von is_online Feld

select * from device_master wo is_online = 1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top