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

SQL 替代 LIKE 的另類寫法:CHARINDEX 實戰技巧

     編輯:關於SqlServer

基本替代:字元包含判斷

-- 原本 LIKE 寫法
SELECT * FROM table1 WHERE username LIKE '%c%';

-- CHARINDEX 寫法
SELECT * FROM table1 WHERE CHARINDEX('c', username) > 0;

CHARINDEX 回傳找到位置(1-based),未找到回傳 0。> 0 即代表「包含」。

進階優勢:直接搜尋特殊字元

LIKE 需轉義 %、_、[ 等,CHARINDEX 完全不受影響:

-- 找出含 % 號的帳號
SELECT * FROM table1 WHERE CHARINDEX('%', username) > 0;

-- 也可用 ASCII 碼
SELECT * FROM table1 WHERE CHARINDEX(CHAR(37), username) > 0;  -- 37 = '%'

效能真相

  • 理論上 CHARINDEX 多一個 > 0 判斷,但 CPU 成本極低。
  • 真正耗時在字串掃描,兩者掃描邏輯相同,實測差異可忽略。
  • 若欄位有索引且搜尋模式為「字首%」(如 LIKE 'abc%'),優化器仍可用 Index Seek;CHARINDEX 同樣可被 SARGable 改寫。

適用場景建議

場景建議
固定字首/字尾搜尋、需索引 Seek優先用 LIKE
搜尋模式含大量特殊字元、動態組裝CHARINDEX 更簡潔
程式碼可讀性優先、團隊習慣統一風格即可

掌握 CHARINDEX,讓特殊字元搜尋不再頭痛!

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