Pergunta

Parece uma pergunta idiota, e ainda. Poderia ser o meu IDE que está me gozando-se. Aqui está o código (este é gerado a partir 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 eu executar essa consulta eu recebo três fileiras atrás, com dois campos boolean chamados activo e público. Adicionando na linha comentada retorna nenhuma linha. Alterar a linha para qualquer um dos seguintes:

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

Ele não funciona. Tanto erros ou nenhum resultado. Eu pesquisei para isso e encontrou uma escassez de consultas SQL reais lá fora. E aqui estamos.

Assim: como faço para usar um campo boolean em uma cláusula onde, em SQLite

IDE é Administrador SQLite.

Atualizar : Bem, eu encontrei a resposta. SQLite Administrator vai deixar você fazer backup de seus próprios tipos aparentemente; a criar SQL que obtém olhares gerados assim:

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)

A correção para a consulta é

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

A verdadeira questão aqui é, como o primeiro respondente assinalou, não há nenhum tipo boolean em SQLite. Não é um problema, mas algo para estar ciente. Eu estou usando DbLinq para gerar a minha camada de dados; talvez ele não deve permitir o mapeamento de tipos que SQLite não suporta. Ou deve mapear todos os tipos que não são nativas para SQLite para um tipo de cadeia.

Foi útil?

Solução

SQLite não tem o tipo boolean: Que tipos de dados suportados pelo SQLite

A linha comentada-out como é deve funcionar, basta usar inteiro valores de 1 e 0 em seus dados para representar um boolean.

Outras dicas

Você não precisa usar qualquer operador de comparação para comparar um valor booleano em sua cláusula WHERE.

Se a sua coluna 'booleano' é nomeado is_selectable, sua cláusula onde seria simplesmente: WHERE is_selectable

SQLite não tem built-in tipo booleano - você tem que usar um inteiro em vez. Além disso, quando você está comparando o valor para 'TRUE' e 't', você está comparando-a com aqueles valores como strings, não como booleans ou inteiros e, portanto, a comparação será sempre falham.

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

-> Isto lhe dará Resultado ter valor false de campo is_online

SELECT * FROM device_master onde is_online! = 1

-> Isto lhe dará Resultado ter verdadeiro valor do campo is_online

SELECT * FROM device_master onde is_online = 1

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top