当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在SQLite的where子句中使用布尔字段?》经验,为你挑选了3个好方法。

这似乎是一个愚蠢的问题,但是.可能是我的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管理员.

更新:嗯,我找到了答案.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本机类型映射到字符串类型.



1> Chad Birch..:

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

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


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

2> Avi Cherry..:

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

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


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

3> Kyle Cronin..:

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

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

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有