首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 與 SQL Server 差異系列(五):運算子深度解析

     編輯:MySQL 資料庫相關知識

本文詳細對比 MySQL 與 SQL Server 在運算子上的差異,涵蓋安全等於、最大/最小值、正則表達式、邏輯運算、位運算及特殊字元處理。

1. 安全等於運算子 <=> (Null-safe Equal)

功能類似 =,但能正確處理 NULL 比較:

  • NULL <=> NULL 返回 1(真)
  • NULL <=> 1 返回 0(假)
  • 1 <=> 1 返回 1

SQL Server 無對應運算子,需用 IS NULL 或 IS NOT DISTINCT FROM (SQL Server 2022+)。

2. LEAST() 與 GREATEST() - 多值比較

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;字串按字典序比較;數值按數值大小比較。

3. REGEXP 正則表達式運算子

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)

常用元字元:^ 行首、$ 行尾、. 任意字元、[...] 字元集合、* 零或多次、+ 一或多次、? 零或一次。

4. 邏輯運算子

運算子MySQLSQL Server說明
ANDAND / &&AND邏輯與
OROR / ||OR邏輯或
XORXOR無 (用 ^ 模擬)異或:一真一假為真

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;多個運算子左結合依序計算。

5. 位運算子

MySQL 提供完整位運算,SQL Server 2022 前較弱。

運算子符號說明
按位或|任一位為 1 則 1
按位與&皆為 1 則 1
按位異或^不同則 1
左移<<乘 2 的 n 次方
右移>>除 2 的 n 次方
按位取反~0↔1 翻轉

查看二進制:SELECT BIN(20); -- 10100

6. 特殊字元跳脫

MySQL 使用反斜線 \ 跳脫,SQL Server 用單引號雙寫 ''。

字元MySQL 跳脫SQL Server 跳脫
單引號\'''
雙引號\"""
反斜線\\\
換行\nCHAR(10)
定位符\tCHAR(9)
-- MySQL 插入單引號
INSERT INTO table_1(name) VALUES('\'');

總結

MySQL 在運算子豐富度上優於舊版 SQL Server,特別是 REGEXP、<=>、位運算等。遷移專案時需特別注意 || 在 SQL Server 中是字串串接而非邏輯或,以及跳脫字元差異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved