Pregunta

Parece una pregunta tonta, y, sin embargo. Podría ser mi IDE que me está haciendo el tonto para arriba. Aquí está el código (esto se genera a partir de 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

Si funciono con esta pregunta me sale tres filas más atrás, con dos campos booleanos llamadas activa y pública. Añadiendo en la línea comentada no devuelve ninguna fila. Cambio de la línea a cualquiera de los siguientes:

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

No funciona. Cualquiera de los errores o resultados. He buscado en Google para esto y encontré una escasez de consultas SQL que hay. Y aquí estamos.

Así que: ¿Cómo utilizo un campo booleano en una cláusula where en SQLite

?

IDE es Administrador de SQLite.

Actualizar : Bueno, he encontrado la respuesta. Administrador de SQLite le permitirá realizar sus propios tipos aparentemente; la creación de SQL que se ve generados de esta manera:

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 solución a la consulta es

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

El verdadero problema aquí es, como el primer respondedor señaló, no hay ningún tipo booleano en SQLite. No es un problema, pero es algo a tener en cuenta. Estoy usando DbLinq para generar mi capa de datos; tal vez no debería permitir la asignación de tipos que SQLite no soporta. O debería asignar todos los tipos que no son nativas de SQLite a un tipo de cadena.

¿Fue útil?

Solución

SQLite no tiene el tipo booleano: ¿Qué tipos de datos SQLite hace de soporte

La línea comentada, ya que es debería funcionar, sólo tiene que utilizar valores enteros de 1 y 0 en sus datos para representar un valor booleano.

Otros consejos

No es necesario utilizar cualquier operador de comparación para comparar un valor booleano en su cláusula where.

Si su columna 'booleano' es el nombre is_selectable, su cláusula donde sería simplemente: WHERE is_selectable

SQLite tiene ningún tipo lógico incorporado - usted tiene que utilizar un número entero en su lugar. Además, cuando se está comparando el valor a 'verdadero' y 't', lo está comparando a esos valores como cadenas, no como booleanos o enteros, y por lo tanto la comparación siempre se producirá un error.

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

-> Esto le dará Resultado tener Falso valor del campo is_online

SELECT * FROM device_master donde is_online! = 1

-> Esto le dará Resultado tener verdadero valor del campo is_online

SELECT * FROM device_master donde is_online = 1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top