INSTR(欄位名, 字串) 回傳字串在欄位內容中的位置(從 1 起算),找不到回傳 0。大小寫不敏感。
SELECT * FROM file ORDER BY INSTR(Title, 'au') > 0 DESC;
標題含「au」的列優先顯示。
SELECT INSTR(title, 'ha') FROM file;
SELECT id, 1 FROM world_guide WHERE id = 32
UNION
SELECT * FROM (
SELECT id, INSTR('30,35,31,', id + ',') AS d
FROM world_blog
WHERE id IN (30, 35, 31)
ORDER BY d
) AS t;
利用 INSTR 計算 ID 在指定字串中的位置,達成自訂順序。
場景:表 A(姓名)、表 B(標題),統計每個姓名在標題中出現次數並排序。
-- 寫法一:INNER JOIN + INSTR
SELECT 姓名, COUNT(b.title)
FROM a
INNER JOIN b ON INSTR(b.title, a.姓名) > 0
GROUP BY 姓名
ORDER BY COUNT(b.title);
-- 寫法二:子查詢
SELECT name,
(SELECT COUNT(*) FROM 表B WHERE INSTR(title, 表A.name))
FROM 表A
ORDER BY 2 DESC;
INSTR 屬於非 SARG 條件,無法使用索引,大量資料時會全表掃描。