如何使用SQL反转可空的布尔值?

时间:2015-11-05 14:50:04

标签: sql-server

我正在寻找一种在MS-SQL中反转可空布尔值的方法。如果布尔字段为NULL,我想认为请求的行为是假的。

我目前的要求是

UPDATE tableName SET booleanColumnName=(1 ^ booleanColumnName) WHERE xxx.

这不适用于NULL值,因为它仍为NULL。

4 个答案:

答案 0 :(得分:3)

使用:

ISNULL(booleanColumnName, 0)

即:

UPDATE tableName SET booleanColumnName = (1 ^ ISNULL(booleanColumnName, 0)) WHERE xxx.

答案 1 :(得分:1)

或尝试

UPDATE tableName SET booleanColumnName = coalesce(1^booleanColumnName,0) WHERE xxx

基本上与IsNull(field,defaultValue)相同,但是,您可以添加更多的空检查,如:

coalesce(booleanColumnName, someotherColumn, @default, 0)

这是对我的方法的测试

create table #test ( a bit, id int identity(1,1) )
insert into #test
select null
union
select 0
union
select 1

select *, coalesce(1^a, 0)
  from #test

你会看到它翻转bools并给你一个0表示null。

答案 2 :(得分:0)

怎么样?
UPDATE tableName SET booleanColumnName=(1 ^ isnull(booleanColumnName, 0)) WHERE xxx.

答案 3 :(得分:0)

@ Giorgi的答案(+1)是您代码的最简单(和第一)解决方案。一个不使用狡猾的数学技巧的替代方案可能会更清楚一点:

UPDATE tablename
 set booleanColumnName = case isnull(booleanColumnName, 0)
                           when 0 then 1
                           else 0
                         end

甚至

UPDATE tablename
 set booleanColumnName = case booleanColumnName
                           when 1 then 0
                           else 1
                         end