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

SQL Server 註解、運算子與萬用字元完整參考:從優先順序到 LIKE 模式比對實戰

     編輯:關於SqlServer

掌握 T-SQL 的註解風格、運算子優先順序、萬用字元語意,是撰寫可讀、正確、高效查詢的基礎語法功力。

註解風格雙軌制

風格語法範圍標準建議用途
單行註解-- 註解文字行尾ANSI SQL行內說明、暫時停用單行
多行註解/* 註解區塊 */跨行C 語言風格區塊說明、大段程式碼暫時停用、檔案標頭資訊
  • 多行註解不可巢狀:/* outer /* inner */ outer */ 會在第一個 */ 結束,導致語法錯誤。
  • 建立團隊註解規範:檔案標頭 (作者/日期/用途/變更記錄)、區塊功能說明、複雜邏輯逐行註釋。

運算子完整優先順序表 (高→低)

優先順序運算子類別運算子結合性
1括號()左→右
2位元一元~ (NOT)右→左
3算術乘除* / %左→右
4算術加減+ -左→右
5位元異或^左→右
6位元且&左→右
7位元或|左→右
8比較= > < >= <= <> != !> !<左→右
9邏輯非NOT右→左
10邏輯且AND左→右
11邏輯或OR左→右

注意: !=、!>、!< 為非 ANSI 標準,建議使用 <>、<=、>=。

字串串連運算子 +

<運算式1> + <運算式2>
  • 隱含轉換規則:非字串運算元自動 CAST 為字串 (依資料型別優先順序)。
  • NULL 傳播:任一運算元為 NULL → 結果為 NULL (除非 SET CONCAT_NULL_YIELDS_NULL OFF,但此選項已棄用)。
  • 使用 ISNULL/COALESCE 預處理 NULL 值。

範例 4-7:

DECLARE @startdate datetime = '2000-01-01';
SELECT 'Start Date: ' + CONVERT(varchar(12), @startdate, 107); 
-- 結果: Start Date: Jan 01 2000

範例 4-8:

SELECT '最高薪員工: ' + e_name + ' 薪資: ' + CONVERT(varchar(10), e_wage)
FROM employee
WHERE e_wage = (SELECT MAX(e_wage) FROM employee);
-- 結果: 最高薪員工: 張三 薪資: 8000.00

萬用字元 (Wildcard) 與 LIKE/不LIKE 模式比對

萬用字元符合條件範例匹配範例
%任意長度 (含 0) 任意字元字串'Mc%'Mc, McDonald, McKinley
_單一任意字元'_ean'Dean, Sean, Jean
[range]括號內指定範圍內的單一字元'[C-P]arsen'Carsen, Larsen, Karsen (C-P 範圍)
[^range]不在指定範圍內的單一字元'[^A-F]arsen'Garsen, Harsen (非 A-F)

萬用字元表

LIKE 進階技巧

  • 逸出字元:WHERE col LIKE '100\%' ESCAPE '\' 查詢字面值 '100%'。
  • 前導萬用字元效能陷阱:LIKE '%keyword%' 無法使用索引求值 (Index Seek),導致全表掃描。全文檢索或 CHARINDEX + 計算欄位索引可改善。
  • 大小寫敏感性:依資料庫/欄位定序決定。明確控制請用 COLLATE Latin1_General_CS_AS。
  • Pattern 參數化:WHERE col LIKE @pattern 避免動態 SQL 注入風險。

實務編碼規範建議

  1. 複雜運算式必須加括號明確優先順序,勿依賴預設規則。
  2. 位元運算子 (& | ^ ~) 僅用於旗標位元操作,勿混雜邏輯判斷。
  3. 比較運算子統一使用 ANSI 標準 (<> 而非 !=)。
  4. 註解說明「為什麼」而非「做什麼」,程式碼本身應自述「做什麼」。

語法細節決定查詢正確性與可維護性,將運算子優先順序表、萬用字元速查卡貼在工位旁,養成寫查詢時隨手驗證的習慣。

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