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

如何在SQLite中的where子句中使用布尔字段?,sqlite,dblinq,Sqlite,Dblinq,这似乎是一个愚蠢的问题,然而。可能是我的IDE把我搞砸了。以下是代码(由DbLinq生成): 如果我运行这个查询,我会返回三行,其中有两个布尔字段,分别称为Active和Public。添加注释掉的行不会返回任何行。将行更改为以下任意一项: pics$.Active = 'TRUE' pics$.Active = 't' pics$.Active = boolean(1) 它不起作用。要么出错,要么没有结果。我在谷歌上搜索了一下,发现这里缺少实际的SQL查询。我们到了 那么:如何在SQLit

这似乎是一个愚蠢的问题,然而。可能是我的IDE把我搞砸了。以下是代码(由DbLinq生成):

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

pics$.Active = 'TRUE'
pics$.Active = 't' 
pics$.Active =  boolean(1)
它不起作用。要么出错,要么没有结果。我在谷歌上搜索了一下,发现这里缺少实际的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)
该查询的修复程序是

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

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

SQLite没有布尔类型:


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

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


来源:

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

如果您的“boolean”列被命名为“可选”,那么您的where子句将是:

你在哪里

-->这将导致is\U online字段的值为假

从设备主机中选择*,设备主机在线=1

-->这将使您的结果具有is_online字段的真实值


从设备\u主机中选择*,其中在线=1

必须是正在欺骗我的SQLite管理员。当您构建表时,它有一个布尔类型可用。但是在这个领域的查询总是没有结果的。看到我的答案了吗?如果您试图找到那些不可选择的。WHERE not(is_selective)Good,但是如果我想将NULL值视为布尔值false呢?WHERE COALESCE(is_selective_maybe_NULL,false)
AND pics$.Active = 'Y' AND pics$.Public = 'Y'