我想知道如果在sqlite数据库中任何值不为null,我该如何匹配。我正在尝试column_name IS NOT NULL
,但它没有给我正确的结果。实际上它在某个地方NULL
,而在某个地方它是表中的(null)
。我认为它会检查NULL
而不是(null)
。如何获得不是(null)
的结果?
请查看图片
表格定义
或者两个空值之间有什么区别?
答案 0 :(得分:2)
您使用IS NOT NULL
个关键字匹配非空列。
您看到的(null)
就是编辑器如何表明该列没有价值。
以SQLite(WebSQL)SQLFiddle为例:http://sqlfiddle.com/#!7/178db/3
create table test (
field1 int,
field2 int
);
insert into test (field1) values (1);
insert into test (field1) values (2);
-- below statement will result in no results
select * from test where field2 is not null;
-- below statement will result in 2 records
select * from test where field2 is null;
field1 field2
------ ------
1 (null)
2 (null)
在Mac上测试
在Mac中打开终端并输入以下命令。
$> sqlite testfile.sqlite.db
sqlite> select * from testing;
sqlite> insert into testing (field1) values (1);
sqlite> insert into testing (field1) values (2);
-- Notice the results
sqlite> select * from testing;
1|
2|
-- Notice the results when requesting field2 is null
sqlite> select * from testing where field2 is null;
1|
2|
-- Notice the results when requesting field2 is NOT null
sqlite> select * from testing where field2 is not null;
sqlite> .quit
现在,转到SQLite文件所在的目录
$> cd /Users/<you>/Documents
$> sqlite <myfile.db>
-- retrieve your table's CREATE TABLE statement
-- and add it to your answer
$> .dump ServiceObjects
-- check to see if your NULL values are appearing similar to the example above
-- if feasible, paste a portion of your output in your answer as well
$> select * from ServiceObjects
-- try running queries with WHERE <field-of-interest> IS NOT NULL
-- try running queries with WHERE <field-of-interest> IS NULL
你得到的结果与我看到的结果相似吗?还请在您编辑的答案中包含您的SQLite版本。我使用的是3.8.10.2。
答案 1 :(得分:2)
任何列仍然可以存储任何类型的数据。这只是一些 在给定选择的情况下,列将优先使用一个存储类 另一个。列的首选存储类称为其 &#34;亲和力&#34 ;.
具有TEXT亲缘关系的列使用存储类存储所有数据 NULL,TEXT或BLOB。如果将数值数据插入到列中 TEXT亲缘关系在存储之前将其转换为文本形式。
具有NUMERIC亲和力的列可能包含使用全部五个值的值 存储类。当文本数据插入NUMERIC列时, 文本的存储类转换为INTEGER或REAL(按顺序) 如果这种转换是无损且可逆的,则优先考虑。
所以在这一行的某处,这些列用文字值&#39;(null)&#39; 写成。并且这个值可以是例如没有转换为INTEGER而没有损失。
我建议您使用
更新您的表格UPDATE yourtable SET name IS NULL WHERE name = '(null)';
UPDATE yourtable SET desc IS NULL WHERE desc = '(null)';
UPDATE ... a.s.o
用于所有相关的表和列,以便获得一致的表。