一、比較運算符
1.1 安全等於 <=> (MySQL 獨有)
| 運算式 | 結果 | 說明 |
NULL <=> NULL | 1 (TRUE) | 等值比較,NULL 視為相等 |
1 <=> NULL | 0 (FALSE) | 非 NULL vs NULL 不等 |
1 <=> 1 | 1 | 普通等值 |
1 = NULL | NULL | 標準 SQL:任何與 NULL 比較結果為 NULL |
用途:WHERE col <=> val 可直接匹配 NULL,無需 IS NULL 分支。
1.2 LEAST / GREATEST (多值極值)
SELECT LEAST(2, 0); -- 0
SELECT LEAST('a', 'b', 'c'); -- 'a' (字典序最小)
SELECT LEAST(10, NULL); -- NULL (任一參數為 NULL 結果為 NULL)
SELECT GREATEST(2, 0); -- 2
SELECT GREATEST('a', 'b'); -- 'b'
SELECT GREATEST(10, NULL); -- NULL
MSSQL 無對應函數,需用 CASE 或 IIF 模擬。
二、正則表達式 REGEXP (MySQL 獨有)
MSSQL 無內建正則 (需 CLR 整合),MySQL 原生支援。
常用元字符
| 符號 | 含義 | 範例匹配 |
^ | 行首 | 'abc' REGEXP '^a' → 1 |
$ | 行尾 | 'abc' REGEXP 'c$' → 1 |
. | 任意單字元 | 'abc' REGEXP '.bc' → 1 |
[...] | 字元集合 | 'abc' REGEXP '[ab]' → 1 |
[^...] | 排除集合 | 'abc' REGEXP '[^ab]' → 1 (匹配 c) |
| | 或 | 'abc' REGEXP 'ab|xy' → 1 |
* | 零或多次 | 'abc' REGEXP 'ab*c' → 1 (匹配 a, 0個b, c) |
+ | 一次或多次 | 'abc' REGEXP 'ab+c' → 1 (至少1個b) |
{n} | 恰好 n 次 | 'aaa' REGEXP 'a{3}' → 1 |
{m,n} | m 到 n 次 | 'ab' REGEXP 'ab{1,3}' → 1 |
實測範例
SELECT 'ssky' REGEXP '^s'; -- 1 (以 s 開頭)
SELECT 'ssky' REGEXP 'y$'; -- 1 (以 y 結尾)
SELECT 'ssky' REGEXP '.sky'; -- 1 (任意字元 + sky)
SELECT 'ssky' REGEXP '[ab]'; -- 0 (不含 a 或 b)
三、邏輯運算符擴展
| 運算符 | MSSQL | MySQL | 備註 |
| AND | AND | AND / && | MySQL 支援 && |
| OR | OR | OR / || | MySQL 支援 || (需 PIPES_AS_CONCAT OFF) |
| XOR | 無 | XOR | 異或:單真為真 |
| NOT | NOT | NOT / ! | MySQL 支援 ! |
XOR 真值表
SELECT 1 XOR 1; -- 0 (真真假)
SELECT 0 XOR 0; -- 0 (假假假)
SELECT 1 XOR 0; -- 1 (真假真)
SELECT 1 XOR NULL; -- NULL
SELECT 1 XOR 1 XOR 1; -- 1 (左結合: (1 XOR 1) XOR 1 = 0 XOR 1 = 1)
四、位運算符 (MySQL 獨有,MSSQL 無)
| 運算符 | 含義 | 範例 | 結果 |
| | 位或 | 5 | 3 | 7 (101 | 011 = 111) |
& | 位與 | 5 & 3 | 1 (101 & 011 = 001) |
^ | 位異或 | 5 ^ 3 | 6 (101 ^ 011 = 110) |
<< | 左移 | 5 << 1 | 10 (1010) |
>> | 右移 | 5 >> 1 | 2 (10) |
~ | 位取反 | ~5 | -6 (補碼) |
輔助函數:BIN(10) → '1010' 查看二進制表示。
五、特殊字元轉義對比
| 字元 | MySQL 轉義 | MSSQL 轉義 |
單引號 ' | \' | '' (雙單引號) |
雙引號 " | \" | "" |
反斜線 \ | \\ | \ (通常不需轉義) |
| 換行 | \n | CHAR(10) 或字串常值換行 |
| 製表符 | \t | CHAR(9) |
| 回車 | \r | CHAR(13) |
| 退格 | \b | CHAR(8) |
插入單引號實測
-- MySQL
INSERT INTO t1(name) VALUES('\''); -- 成功
SELECT * FROM t1; -- '
-- MSSQL
INSERT INTO t1(name) VALUES(''''); -- 成功
SELECT * FROM t1; -- '
總結遷移對照
| MSSQL | MySQL | 備註 |
col = NULL (錯誤寫法) | col IS NULL / col <=> NULL | MySQL 推薦 <=> |
CASE WHEN ... 求極值 | LEAST/GREATEST | MySQL 簡潔 |
| CLR 正則 | REGEXP | MySQL 原生 |
| 無位運算 | & | ^ << >> ~ | MySQL 位運算完整 |
'' 轉義單引號 | \' | 轉義字元不同 |
- 上一篇文章: 從 MSSQL 遷移 MySQL 語法差異全對比 (四):BLOB/TEXT 大對象類型對照
- 下一篇文章: MySQL 核心知識體系總結:數據類型、字元集、增刪改查、備份恢復、中文亂碼
Copyright ©
程式碼之家 All Rights Reserved