2015-08-16 64 views
2

布爾值,我有一個Boolean類型字段在我的表(PostgreSQL的9.0)翻轉PostgreSQL中

有沒有寫一個查詢,更新此字段相反值,而不知道什麼是目前有沒有辦法?

如果是True那麼它會更新到False

如果是False那麼它會更新到True

基本上我問是否有一個機制,允許治療Boolean類型相同1 bit。例如,在C中,如果x可以是{1,0},那麼您可以簡單地編寫x=!x,如果它是0那麼它將是1,如果它是1那麼它將是0。不需要IF陳述等......

回答

4

爲什麼不使用operator NOT?在`SET`子句中

Update tableName 
set c = NOT c 
where ... 

http://www.postgresql.org/docs/current/static/functions-logical.html

實施例SqlFiddle

+2

這是一個語法錯誤表取得資格的目標列。必須是:'SET c = NOT tablename.c' –

+0

它沒有'tablename'。你能清楚嗎? – John

+0

@John,是的,我的答案的初始版本中有一個語法錯誤,在評論中指出。 'set tableName.c ='不合法。即使存在'from'子句,只能引用'update'子句中聲明的表中的字段來更改值。所以這兩個作品'設置c =不是tableName.c'和'設置c =不是c'。你可以看到sqlfiddle的工作解決方案,並與它一起玩看看選項 –