我有一个位值列,包含条目0,1,NULL。
我需要显示
的所有条目bcode = 0
由于没有为列设置默认的0,因此我需要处理null。
要获得所有在位列中有null和0项的表项,我在下面写入query
select code
from tbl_sample
where (bcode = 0 or bcode is null)
我不确定这是否会返回0和null。但是,如果它只执行上面的查询,下面的查询是否有效,还是会导致错误的输出?
select code
from tbl_sample
where isnull(bcode, 0) = 0
或
select code
from tbl_sample
where isnull(bcode, '') = 0
什么是正确的方式?
正如我在注释中提到的,在这里使用您已经拥有的语法是正确的调用。虽然您可以使用ISNULL
或COALESCE
,但这会使查询不可sargable,这意味着表上的任何索引都不能用于帮助RDBMS筛选所需的行,这可能意味着查询明显变慢。
由于没有为列
设置默认0
老实说,这听起来像你应该改变你的列的定义为bcode bit NOT NULL
(我假设bit
,因为它只能是0
和1
),然后创建一个DEFAULT
CONSTRAINT
:
ALTER TABLE dbo.YourTable
ADD CONSTRAINT DF_YourTable_Bcode DEFAULT 0 FOR Bcode;
如果你是在SQL Server的前沿虽然(2022+),你可以使用IS DISTINCT FROM
(再次,假设你的语句,列只能有1
,0
和NULL
是真的和/或bcode
是一个bit
):
SELECT code
FROM dbo.YourTable
WHERE BCode IS DISTINCT FROM 1;