我正在寻找一种在MS-SQL中反转可空布尔值的方法。如果布尔字段为NULL,我想认为请求的行为是假的。
我目前的要求是
UPDATE tableName SET booleanColumnName=(1 ^ booleanColumnName) WHERE xxx.
这不适用于NULL值,因为它仍为NULL。
答案 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