这似乎是一个愚蠢的问题,和爱好。这可能是我的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

在注释的线,因为它是应该工作,只使用1和0的整数值中的数据,以表示一个布尔值。

其他提示

您不需要使用任何比较运算符为了您的where子句中比较布尔值。

如果您的“布尔”列被命名为is_selectable,你的where子句将仅仅是: WHERE is_selectable

SQLite的有没有内置的布尔类型 - 你必须使用一个整数代替。此外,当您比较的值为“TRUE”和“T”,你比较它与这些值作为字符串,而不是作为布尔或整数,所以,比较总是会失败。

来源: http://www.sqlite.org/datatype3.html

- >这会给你结果这种具有is_online场值为false

选择*从device_master其中is_online!= 1

- >这会给你结果这种具有is_online领域的真正价值。

选择*从device_master其中is_online = 1

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top