SQL Server 2000 提供豐富的運算子支援資料運算、邏輯判斷與位元操作,是撰寫高效存儲程序與查詢的基礎。本文系統整理各類運算子語法、優先序與實戰技巧。
支援標準數學運算,適用於所有數值資料類型(int、decimal、float、money 等):
| 運算子 | 功能 | 範例 | 結果 |
|---|---|---|---|
| + | 加法 | 10 + 5 | 15 |
| - | 減法/負號 | 10 - 5 / -5 | 5 / -5 |
| * | 乘法 | 10 * 5 | 50 |
| / | 除法 | 10 / 3 | 3 (整數除法) |
| % | 模數 (餘數) | 10 % 3 | 1 |
注意:整數除法會截斷小數位,需轉型為 CAST(10 AS DECIMAL(10,2)) / 3 獲得精確結果。運算子優先序:* / % 高於 + -。
唯一的指派運算子 = 用於變數賦值與欄位更新:
-- 變數宣告與指派
DECLARE @Counter INT;
SET @Counter = 1; -- 標準語法
SELECT @Counter = 1; -- 替代語法
-- 累加操作
SET @Counter = @Counter + 1;
-- 或簡寫 (僅限 SET)
SET @Counter += 1; -- SQL Server 2008+ 支援
在 UPDATE 陳述式中:SET Price = Price * 1.1 即為就地更新運算。
適用於整數類型,進行二進位層級操作,常用於旗標儲存、權限位遮罩:
| 運算子 | 名稱 | 說明 | 範例 (二進位) |
|---|---|---|---|
| & | 位元 AND | 兩位皆為 1 結果為 1 | 5 & 3 = 1 (101 & 011 = 001) |
| | | 位元 OR | 任一位為 1 結果為 1 | 5 | 3 = 7 (101 | 011 = 111) |
| ^ | 位元 XOR | 兩位不同結果為 1 | 5 ^ 3 = 6 (101 ^ 011 = 110) |
| ~ | 位元 NOT | 逐位取反 | ~5 = -6 (補數表示) |
-- 定義權限常數
DECLARE @READ INT = 1; -- 0001
DECLARE @WRITE INT = 2; -- 0010
DECLARE @EXECUTE INT = 4; -- 0100
DECLARE @ADMIN INT = 8; -- 1000
-- 使用者擁有讀寫權限
DECLARE @UserPerm INT = @READ | @WRITE; -- 0011 = 3
-- 檢查是否有寫入權限
IF (@UserPerm & @WRITE) = @WRITE
PRINT '允許寫入';
-- 移除執行權限
SET @UserPerm = @UserPerm & ~@EXECUTE;
標準 SQL 比較運算,回傳布林值:
= 等於、<> / != 不等於>、>=、<、<=!> 不大於、!< 不小於 (T-SQL 擴充)| 運算子 | 功能 | 真值表 |
|---|---|---|
| ALL | 子查詢所有值滿足條件 | 子查詢為空回傳 TRUE |
| AND | 邏輯 AND | TRUE AND TRUE = TRUE |
| ANY / SOME | 子查詢任一值滿足條件 | 子查詢為空回傳 FALSE |
| BETWEEN | 範圍檢查 (含界) | x BETWEEN a AND b |
| EXISTS | 子查詢是否回傳資料列 | 有資料列 = TRUE |
| IN | 清單成員檢查 | 值在清單中 = TRUE |
| LIKE | 模式比對 | 支援 % _ [範圍] 萬用字元 |
| NOT | 邏輯否定 | 反轉布林值 |
| OR | 邏輯 OR | TRUE OR FALSE = TRUE |