本文詳細對比 MySQL 與 SQL Server 在運算子上的差異,涵蓋安全等於、最大/最小值、正則表達式、邏輯運算、位運算及特殊字元處理。
<=> (Null-safe Equal)功能類似 =,但能正確處理 NULL 比較:
NULL <=> NULL 返回 1(真)NULL <=> 1 返回 0(假)1 <=> 1 返回 1SQL Server 無對應運算子,需用 IS NULL 或 IS NOT DISTINCT FROM (SQL Server 2022+)。
LEAST(值1, 值2, ...):返回最小值
GREATEST(值1, 值2, ...):返回最大值
SELECT LEAST(2, 0), LEAST('a','b','c'), LEAST(10, NULL);
-- 結果:0, 'a', NULL
SELECT GREATEST(2, 0), GREATEST('a','b','c'), GREATEST(10, NULL);
-- 結果:2, 'c', NULL
規則: 參數中任一為 NULL,結果為 NULL;字串按字典序比較;數值按數值大小比較。
MySQL 內建強大的正則支援,SQL Server 需用 CLR 整合或 LIKE 模擬。
SELECT 'ssky' REGEXP '^s', -- 1 (以 s 開頭)
'ssky' REGEXP 'y$', -- 1 (以 y 結尾)
'ssky' REGEXP '.sky', -- 1 (任意字元+sky)
'ssky' REGEXP '[ab]'; -- 0 (不含 a 或 b)
常用元字元:^ 行首、$ 行尾、. 任意字元、[...] 字元集合、* 零或多次、+ 一或多次、? 零或一次。
| 運算子 | MySQL | SQL Server | 說明 |
|---|---|---|---|
| AND | AND / && | AND | 邏輯與 |
| OR | OR / || | OR | 邏輯或 |
| XOR | XOR | 無 (用 ^ 模擬) | 異或:一真一假為真 |
XOR 真值表:
SELECT 1 XOR 1, 0 XOR 0, 1 XOR 0, 1 XOR NULL, 1 XOR 1 XOR 1;
-- 結果:0, 0, 1, NULL, 1
含 NULL 時結果為 NULL;多個運算子左結合依序計算。
MySQL 提供完整位運算,SQL Server 2022 前較弱。
| 運算子 | 符號 | 說明 |
|---|---|---|
| 按位或 | | | 任一位為 1 則 1 |
| 按位與 | & | 皆為 1 則 1 |
| 按位異或 | ^ | 不同則 1 |
| 左移 | << | 乘 2 的 n 次方 |
| 右移 | >> | 除 2 的 n 次方 |
| 按位取反 | ~ | 0↔1 翻轉 |
查看二進制:SELECT BIN(20); -- 10100
MySQL 使用反斜線 \ 跳脫,SQL Server 用單引號雙寫 ''。
| 字元 | MySQL 跳脫 | SQL Server 跳脫 |
|---|---|---|
| 單引號 | \' | '' |
| 雙引號 | \" | "" |
| 反斜線 | \\ | \ |
| 換行 | \n | CHAR(10) |
| 定位符 | \t | CHAR(9) |
-- MySQL 插入單引號
INSERT INTO table_1(name) VALUES('\'');
MySQL 在運算子豐富度上優於舊版 SQL Server,特別是 REGEXP、<=>、位運算等。遷移專案時需特別注意 || 在 SQL Server 中是字串串接而非邏輯或,以及跳脫字元差異。