我正在尋找一種方法來顛倒MS-SQL中的可空布爾值的值。如果NULL中的布爾字段,我想考慮請求的行爲是False。如何顛倒使用SQL的可空布爾值?
我現在的要求是
UPDATE tableName SET booleanColumnName=(1^booleanColumnName) WHERE xxx.
,因爲它仍然是NULL這不NULL值工作。
我正在尋找一種方法來顛倒MS-SQL中的可空布爾值的值。如果NULL中的布爾字段,我想考慮請求的行爲是False。如何顛倒使用SQL的可空布爾值?
我現在的要求是
UPDATE tableName SET booleanColumnName=(1^booleanColumnName) WHERE xxx.
,因爲它仍然是NULL這不NULL值工作。
或者嘗試
UPDATE tableName SET booleanColumnName = coalesce(1^booleanColumnName,0) WHERE xxx
愛喜ntially一樣的ISNULL(場,默認值),但是,你可以添加更多的null檢查,如:
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
你會看到,它翻轉的bool併爲null給你一個0。
用途:
ISNULL(booleanColumnName, 0)
即:
UPDATE tableName SET booleanColumnName = (1^ISNULL(booleanColumnName, 0)) WHERE xxx.
什麼
UPDATE tableName SET booleanColumnName=(1^isnull(booleanColumnName, 0)) WHERE xxx.
@ Giorgi的答案(+1)是您的代碼最簡單(也是最先)的解決方案。不使用wifty數學技巧的另一種可能是有點清晰:
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
是什麼如果不是NULL空的逆? –
NULL的倒數是單手鼓掌的聲音。 –
我喜歡將NULL看作「未知」的表示形式。這不是一個可用於比較的值。我手裏拿着一些東西。你不知道它是什麼。它與你所持有的硬幣的價值是否相等?你不知道。我們不知道。答案是未知的,或者是NULL。 – datagod