-- 1. 找出含非 ASCII 可見字符的記錄
SELECT * FROM m_user WHERE emp_no REGEXP '[^ -~]' = 1;
-- 2. 找出完全不含英數字的記錄
SELECT * FROM table WHERE name NOT REGEXP '[a-zA-Z0-9]+';
-- 3. 逗號分隔字串中包含某 ID(配合邊界檢查)
SELECT * FROM linkinfo
WHERE pingid REGEXP '[[:<:]]{id}[[:>:]]'; -- 詞邊界更精確
MySQL 預設不區分大小寫。必須搭配 LIKE/NOT LIKE,不能用 =/!=。
| 符號 | 含義 | 範例 | 匹配示例 |
|---|---|---|---|
% | 任意長度字符(含 0) | LIKE '%三%' | 張三、張貓三、三腳貓、唐三藏 |
_ | 單個任意字符 | LIKE '_三_' | 唐三藏(三字、中間是三) |
[] | 字符集合(REGEXP專用) | REGEXP '[abc]' | 含 a/b/c 任一 |
[^] | 排除字符集合 | REGEXP '[^0-9]' | 含非數字 |
-- 同時含「三」和「貓」
WHERE u_name LIKE '%三%' AND u_name LIKE '%貓%'
-- 以「三」開頭
WHERE u_name LIKE '三%'
-- 以「三」結尾
WHERE u_name LIKE '%三'
專門處理「逗號分隔字串」的集合查詢:
-- pingid = '1,2,3' 中查找 id=2
SELECT * FROM linkinfo WHERE FIND_IN_SET('2', pingid);
LIKE '%,2,%'(可用索引優化)'1, 2, 3' 會失效LIKE(可走索引前綴)REGEXPFIND_IN_SET