这似乎是一个愚蠢的问题,但是。这可能是我的IDE让我失望了这是代码(这是从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
如果我运行这个查询,我得到三行返回,两个布尔字段称为Active和Public。在注释行中添加不返回任何行。将行更改为以下任一项:
pics$.Active = 'TRUE' pics$.Active = 't' pics$.Active = boolean(1)
它不工作错误或无结果。我已经google了,发现在那里缺少实际的SQL查询。在这里我们是。
那么,我如何在sqlite的where子句中使用一个布尔字段?
IDE是sqlite Administrator。
更新:嗯,我找到了答案。 sqlite Administrator会让你自己组成自己的类型;生成的创建sql如下所示:
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)
查询的修复是
AND pics$.Active = 'Y' AND pics$.Public = 'Y'
这里的真正问题是,正如第一个回答者指出的那样,sqlite中没有布尔类型。不是一个问题,而是需要注意的事情。我使用DbLinq生成我的数据层;也许它不应该允许映射sqlite不支持的类型。或者它应该将不是本机的所有类型映射到字符串类型。