Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 整型字段中的NULL vs 0_Sql_Sqlite - Fatal编程技术网

Sql 整型字段中的NULL vs 0

Sql 整型字段中的NULL vs 0,sql,sqlite,Sql,Sqlite,如果SQLite3数据库包含一个包含整数字段的表,该字段可能包含“null”,但也可能包含整数0,那么如何区分这些值 据我所知,SQLite将整数0表示为“null”,当我在select语句下面运行时,不会提取应该包含0的字段 SELECT integer_column FROM table_name WHERE integer_column IS NOT NULL; 另外,当我在下面运行查询时,不会返回任何行。(即使已插入值0) 在SQLite中处理此问题的最佳方法(常规做法)是什么?

如果SQLite3数据库包含一个包含整数字段的表,该字段可能包含“null”,但也可能包含整数0,那么如何区分这些值

据我所知,SQLite将整数0表示为“null”,当我在select语句下面运行时,不会提取应该包含0的字段

SELECT integer_column 
FROM table_name 
WHERE integer_column IS NOT NULL; 
另外,当我在下面运行查询时,不会返回任何行。(即使已插入值0)


在SQLite中处理此问题的最佳方法(常规做法)是什么?(请记住,我的表中的列可以同时包含“null”和0,并且两个值都不应被视为“损坏的数据”)。

这不是问题
NULL
0
是不同的:

$ sqlite3
SQLite version 3.8.6 ...
sqlite> CREATE TABLE t(i, name);
sqlite> INSERT INTO t VALUES (0, 'zero');
sqlite> INSERT INTO t VALUES (NULL, 'null');
sqlite> SELECT * FROM t WHERE i = 0;
0|zero
sqlite> SELECT * FROM t WHERE i IS NULL;
|null

如果查询不返回任何记录,原因是表中不包含任何具有这些值的行。

我很确定SQLite不会将0表示为NULL。
如果加上+0,则得到A(除非A为NULL)。 如果您添加+NULL,则得到NULL

If you test for equality to zero,  you should get the rows where zero has been stored. 
If you test for IS NULL, you should get the rows where NULL has been stored. 
If you test for equality to NULL, you should get nothing. 
If you test for inequality to NULL, you should get nothing.
当涉及空值时,标准SQL使用三值逻辑。对于习惯于二值逻辑的人来说,三值逻辑令人困惑

If you test for equality to zero,  you should get the rows where zero has been stored. 
If you test for IS NULL, you should get the rows where NULL has been stored. 
If you test for equality to NULL, you should get nothing. 
If you test for inequality to NULL, you should get nothing.