首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL INSTR 函數完全指南:字串搜尋與排序實戰

     編輯:MySQL 資料庫相關知識

INSTR 函數語法與行為

INSTR(欄位名, 字串) 回傳字串在欄位內容中的位置(從 1 起算),找不到回傳 0。大小寫不敏感。

實戰範例

1. 依關鍵字出現與否排序

SELECT * FROM file ORDER BY INSTR(Title, 'au') > 0 DESC;

標題含「au」的列優先顯示。

2. 取得關鍵字位置

SELECT INSTR(title, 'ha') FROM file;

3. 配合 IN 子句實現自訂排序

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 在指定字串中的位置,達成自訂順序。

4. 兩表關聯統計:姓名出現在標題中的次數

場景:表 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 條件,無法使用索引,大量資料時會全表掃描。
  • 適合中小型資料集或離線報表;高頻線上查詢建議改用全文檢索或倒排索引方案。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved