MySQL使用內置函數來進行模糊搜索(locate()等)


常用的一共有4個方法,如下:

1. 使用locate()方法

        1.1.普通用法:

              SELECT `column` from `table` where locate('keyword', `condition`)>0

         類似於 java 的 indexOf();不過 locate() 只要找到返回的結果都大於0(即使是查詢的內容就是最開始部分),沒有查找到才返回0;

        1.2. 指定其實位置:

               SELECT LOCATE('bar', 'foobarbar',5);  --> 7 (從foobarbar的第五個位置開始查找)

2.使用instr()函數 (據說是locate()的別名函數)

       SELECT `column` from `table` where instr(`condition`, ‘keyword’ )>0

       唯一不同的是 查詢內容的位置不同,見SQL語句中過的keyword

3.使用position()方法,(據說也是locate()方法的別名函數,功能一樣) 

         SELECT `column` from `table` where position(‘keywordIN `condition`)

         不過它不再是通過返回值來判斷,而是使用關鍵字 in

4.使用find_in_set()函數

       如: find_in_set(str,strlist),strlist必須要是以逗號分隔的字符串

    如果字符串str是在的strlist組成的N子串的字符串列表,返回值的范圍為1到N

SQL> SELECT FIND_IN_SET('b','a,b,c,d');
+---------------------------------------------------------+
| SELECT FIND_IN_SET('b','a,b,c,d')                       |
+---------------------------------------------------------+
| 2                                                       |
+---------------------------------------------------------+
1 row in set (0.00 sec) 

 

    總結: locate、position 和 instr 的差別只是參數的位置不同,同時locate 多一個起始位置的參數外,兩者是一樣的。

              find_in_set()是個比較特殊的存在,但它們都是返回要查找的子字符串 在 指定字符串中的位置。

              速度上前3個比用 like 稍快了一點。(不過這四個函數都不能使用索引,這是個遺憾)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM