2015-11-05 40 views
0

我正在尋找一種方法來顛倒MS-SQL中的可空布爾值的值。如果NULL中的布爾字段,我想考慮請求的行爲是False。如何顛倒使用SQL的可空布爾值?

我現在的要求是

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

,因爲它仍然是NULL這不NULL值工作。

+5

是什麼如果不是NULL空的逆? –

+1

NULL的倒數是單手鼓掌的聲音。 –

+0

我喜歡將NULL看作「未知」的表示形式。這不是一個可用於比較的值。我手裏拿着一些東西。你不知道它是什麼。它與你所持有的硬幣的價值是否相等?你不知道。我們不知道。答案是未知的,或者是NULL。 – datagod

回答

1

或者嘗試

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。

+0

這沒有找到反值 –

+0

沒有這樣的東西作爲null的逆。 – ewahner

+0

但你不是顛倒布爾值0和1 –

3

用途:

ISNULL(booleanColumnName, 0) 

即:

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

我認爲你編輯之前的第一個答案是正確的......如果booleanColumnName爲null,那麼將1的值設置爲true,我認爲這與他想要的相反。我相信他想把空值視爲假? – ewahner

+0

@ewahner *是錯誤的*應該變成*是真的* –

+0

好的...但是這個答案會將一個空翻轉爲假,然後這個錯誤變爲真......所以這個答案是錯誤的,據我所知。 .my'coalesce(1^booleanColumnName,0)'是最簡單的解決方案。 – ewahner

0

什麼

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

@ 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