| 函數 | 語法 | 說明 |
|---|---|---|
| INSTR | INSTR(str, substr) | 回傳 substr 在 str 中首次出現的位置,參數順序與 LOCATE 相反。 |
| LOCATE | LOCATE(substr, str)LOCATE(substr, str, pos) | 第 1 種同 INSTR;第 2 種可指定起始搜尋位置 pos。 |
| POSITION | POSITION(substr IN str) | 標準 SQL 語法,功能同 LOCATE 雙參數形式。 |
SELECT INSTR('foobarbar', 'bar'); -- 4
SELECT INSTR('xbar', 'foobar'); -- 0
SELECT LOCATE('bar', 'foobarbar'); -- 4
SELECT LOCATE('xbar', 'foobar'); -- 0
SELECT LOCATE('bar', 'foobarbar', 5); -- 7 (從第 5 字元開始找)
SELECT POSITION('bar' IN 'foobarbar'); -- 4
SELECT POSITION('xbar' IN 'foobar'); -- 0
三者皆支援多位元組字元,只有當至少一個參數為二進位字串時才區分大小寫。
測試資料表 o_soft,欄位 tid2 為 VARCHAR:
-- 使用 LOCATE
SELECT * FROM `o_soft` WHERE LOCATE('d200', tid2) > 0;
-- 耗時 0.0050 秒
-- 使用 INSTR
SELECT * FROM `o_soft` WHERE INSTR('d200', tid2) > 0;
-- 耗時 0.0009 秒
結論:在單純字串包含判斷上,INSTR 效能顯著優於 LOCATE。若需指定起始位置搜尋,才必須使用 LOCATE 三參數形式。