首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server BIT 型別取反技巧:可見 1-visible、visible-1、1-visible 三種寫法

     編輯:關於SqlServer

問題背景

SQL Server 無 Boolean 型別,用 BIT (0/1/NULL) 表示。NOT visible 報錯:Operand type clash: bit is incompatible with bit (邏輯非運算元不支援 BIT)。

三種取反寫法 (皆可行)

寫法範例原理推薦度
1 - visibleUPDATE t SET visible = 1 - visible WHERE id = 11-0=1, 1-1=0,直觀無負數⭐⭐⭐⭐⭐
visible - 1UPDATE t SET visible = visible - 1 WHERE id = 10-1=-1 → 隱式轉換為 1 (見下)⭐⭐⭐
~visibleUPDATE t SET visible = ~visible WHERE id = 1位元取反:~0=-1, ~1=-2 → 隱式轉換⭐⭐

為何 -1 能存入 BIT?

-- SQL Server BIT 隱式轉換規則:
-- 任何非零值 → 1
-- 零 → 0
SELECT CAST(-1 AS BIT);  -- 1
SELECT CAST(255 AS BIT); -- 1
SELECT CAST(-999 AS BIT); -- 1

所以 visible - 1 產生 -1 或 0,寫入 BIT 變為 1/0,達到取反效果。

⚠️ 避坑指南

  1. NULL 處理:1 - NULL = NULL,取反保持 NULL。若需 NULL→1,用 ISNULL(visible,0)
  2. 可讀性:1 - visible 語義最清晰,程式碼審查無歧義
  3. 效能:三種編譯為相同純量運算,無差異
  4. CHECK 約束:建議加 CHECK (visible IN (0,1)) 防止髒資料

延伸:條件翻轉

-- 將 0→1, 1→0, NULL→NULL
UPDATE t SET visible = CASE visible WHEN 1 THEN 0 WHEN 0 THEN 1 END;
-- 或
UPDATE t SET visible = 1 - ISNULL(visible, 0);  -- NULL 視為 0 翻轉
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved