WHERE column LIKE 'pattern' ESCAPE 'escape_char'
將 escape_char 後的字符視為字面量,預設常用 \,但可自定義(如 /、# 等)。
底線 _ 在 LIKE 中代表「任意單字符」,需轉義。
-- 測試數據
CREATE TABLE t11 (name VARCHAR2(20));
INSERT INTO t11 VALUES ('aa_a');
INSERT INTO t11 VALUES ('aaa');
COMMIT;
-- ❌ 錯誤:_ 被視為通配符,匹配 'aa_a'、'aaa'、'aab' 等
SELECT * FROM t11 WHERE name LIKE '%_%';
-- ✅ 正確:使用 \ 轉義 _
SELECT * FROM t11 WHERE name LIKE '%\_%' ESCAPE '\';
-- 結果:僅返回 'aa_a'
若搜尋字符串包含「/」,必須用「/」作為轉義字符(正斜槓同理):
SELECT * FROM wan_test WHERE psid LIKE '%//%' ESCAPE '/';
-- 匹配包含 "//" 的字符串
\),避免混用導致維護困難。%、_、轉義字符本身進行轉義處理。%abc% 無法使用索引範圍掃描,若頻繁查詢含通配符字面值的列,考慮功能性索引或 Oracle Text。