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

SQL Server LIKE 謓詞完整指南:萬用字元、逸出字元、模式比對與 Unicode 差異

     編輯:關於SqlServer

語法


match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

萬用字元

字元說明範例
%零或多個任意字元WHERE title LIKE '%computer%'
_ (底線)單一任意字元WHERE au_fname LIKE '_ean' (Dean, Sean)
[範圍]指定範圍/集合內的單一字元WHERE au_lname LIKE '[C-P]arsen'
[^範圍]不在指定範圍/集合內的單一字元WHERE au_lname LIKE 'de[^l]%'

將萬用字元視為字面值

放入方括號:LIKE '5[%]' 比對 "5%"、LIKE '[_]n' 比對 "_n"、LIKE '[-acdf]' 比對 "-、a、c、d、f"

ESCAPE 子句

自訂逸出字元,搜尋包含萬用字元的字面字串:


WHERE comment LIKE '%30!%%' ESCAPE '!'  -- 尋找 "30%"
WHERE notes LIKE '50%% off...' ESCAPE '%'  -- 尋找 "50% off..."

尾隨空格行為差異

資料型別模式尾隨空格運算式尾隨空格
char/varchar (非 Unicode)有意義**忽略** (會比對含零或多空格的值)
nchar/nvarchar (Unicode)有意義**有意義** (SQL-92 標準)

實證範例


-- 非 Unicode char(30) 儲存 'Robert King' (含尾隨空格)
WHERE col1 LIKE '% King'   -- 找到

-- Unicode nchar(30) 儲存 'Robert King' (含尾隨空格)
WHERE col1 LIKE '% King'   -- **找不到** (尾隨空格參與比對)
WHERE RTRIM(col1) LIKE '% King'  -- 找到

ASCII vs Unicode 模式比對

  • 所有參數皆為 ASCII 型別 → ASCII 模式比對 (相容舊版)
  • 任一參數為 Unicode 型別 → **全轉 Unicode 比對** (相容 SQL-92)

日期時間搜尋建議

datetime 值含日期部分,直接等值比對易失效。建議:


WHERE arrival_time LIKE '%9:20%'  -- 找到 1998-12-31 09:20

常見陷阱

陷阱說明解決
NOT LIKE 多重萬用字元LIKE '[^s][^y][^s]%' 逐步計算,可能漏掉符合條件列改用 NOT LIKE 'sys%'
char 變數尾隨空格導致 LIKE 失效@var CHAR(20) 未填滿含空格用 RTRIM(@var) + '%' 或改 VARCHAR
Unicode 欄位尾隨空格干擾nchar 固定長度含空格RTRIM(col) LIKE pattern
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved