如何在SQLite的where子句中使用布尔字段?

jco*_*lum 24 sqlite dblinq

这似乎是一个愚蠢的问题,但是.可能是我的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
Run Code Online (Sandbox Code Playgroud)

如果我运行此查询,我会返回三行,其中两个布尔字段称为Active和Public.添加注释掉的行不会返回任何行.将行更改为以下任何一项:

pics$.Active = 'TRUE'
pics$.Active = 't' 
pics$.Active =  boolean(1)
Run Code Online (Sandbox Code Playgroud)

它不起作用.错误或没有结果.我已经google了这一点,发现实际的SQL查询缺乏.我们在这里.

那么:我如何在SQLite的where子句中使用布尔字段?

IDE是SQLite管理员.

更新:嗯,我找到了答案.SQLite管理员可以让你显然构成自己的类型; 生成的create 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)
Run Code Online (Sandbox Code Playgroud)

查询的修复方法是

AND pics$.Active = 'Y' AND pics$.Public = 'Y'
Run Code Online (Sandbox Code Playgroud)

这里真正的问题是,正如第一个回答者指出的那样,SQLite中没有布尔类型.不是问题,而是要注意的事情.我正在使用DbLinq来生成我的数据层; 也许它不应该允许SQLite不支持的类型映射.或者它应该将所有非SQLite本机类型映射到字符串类型.

Cha*_*rch 19

SQLite没有布尔类型:SQLite支持哪些数据类型?

注释掉的行应该可以工作,只需在数据中使用1和0的整数值来表示布尔值.

  • 必须是那个骗我的SQLite管理员.它在构建表时有一个布尔类型.但查询该字段始终没有结果. (4认同)

Avi*_*rry 18

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

如果你的'boolean'列名为is_selectable,那么你的where子句就是: WHERE is_selectable

  • 哪里没有(is_selectable) (4认同)
  • 哪里停电(is_selectable_maybe_null,false)https://sqlite.org/lang_corefunc.html#coalesce (2认同)

Kyl*_*nin 5

SQLite没有内置的布尔类型-您必须使用整数。同样,当您将值与“ TRUE”和“ t”进行比较时,会将其与这些值作为字符串(而不是布尔值或整数)进行比较,因此比较将始终失败。

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