题
这似乎是一个愚蠢的问题,和爱好。这可能是我的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
如果我运行此查询,我得到三排回去,有两个布尔字段称为主动和公众。添加的注释行不返回行。改变线到下列任一的:
pics$.Active = 'TRUE'
pics$.Active = 't'
pics$.Active = boolean(1)
它不工作。错误或没有结果。我GOOGLE了这一点,并发现实际SQL查询的缺乏在那里。而我们在这里。
所以:我怎么在SQLite的where子句中使用一个布尔字段
?IDE是SQLite的管理员。
更新:嗯,我找到了答案。 SQLite的管理员将让你弥补自己的类型明显;在创建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不支持类型的映射。或者它应该映射不属于原产于SQLite的字符串类型的所有类型。
解决方案
SQLite没有布尔类型:什么数据类型不支持的SQLite ? p>
在注释的线,因为它是应该工作,只使用1和0的整数值中的数据,以表示一个布尔值。
其他提示
您不需要使用任何比较运算符为了您的where子句中比较布尔值。
如果您的“布尔”列被命名为is_selectable,你的where子句将仅仅是:
WHERE is_selectable
SQLite的有没有内置的布尔类型 - 你必须使用一个整数代替。此外,当您比较的值为“TRUE”和“T”,你比较它与这些值作为字符串,而不是作为布尔或整数,所以,比较总是会失败。
- >这会给你结果这种具有is_online场值为false
选择*从device_master其中is_online!= 1 强>
- >这会给你结果这种具有is_online领域的真正价值。
选择*从device_master其中is_online = 1 强>