婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > MySQL高效模糊搜索之內(nèi)置函數(shù)locate instr position find_in_set使用詳解

MySQL高效模糊搜索之內(nèi)置函數(shù)locate instr position find_in_set使用詳解

熱門(mén)標(biāo)簽:如何在高德地圖標(biāo)注新地址 外呼系統(tǒng)服務(wù) 高德地圖標(biāo)注中心個(gè)人注冊(cè) 高德地圖標(biāo)注模式 400電話辦理都選易號(hào)網(wǎng) 外呼系統(tǒng)防封號(hào)違法嗎 湘潭電銷(xiāo)機(jī)器人咨詢電話 寶應(yīng)電信400電話辦理費(fèi)用 電銷(xiāo)機(jī)器人針對(duì)的

常用的一共有4個(gè)方法,如下:

1.使用locate()方法

普通用法:

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

類(lèi)似于java的indexOf();

不過(guò)locate()只要找到返回的結(jié)果都大于0(即使是查詢的內(nèi)容就是最開(kāi)始部分),沒(méi)有查找到才返回0;

指定起始位置:

SELECT LOCATE('bar','foobarbar',5);(從foobarbar的第五個(gè)位置開(kāi)始查找)

2.使用instr()函數(shù)(據(jù)說(shuō)是locate()的別名函數(shù))

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

唯一不同的是查詢內(nèi)容的位置不同

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

SELECT `column` from `table` where position(‘keyword' IN `condition`)

不過(guò)它不再是通過(guò)返回值來(lái)判斷,而是使用關(guān)鍵字in

4.使用find_in_set()函數(shù)

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

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

SQL>SELECTFIND_IN_SET('b','a,b,c,d');
---------------------------------------------------------+
|SELECTFIND_IN_SET('b','a,b,c,d')|
---------------------------------------------------------+
|2|
---------------------------------------------------------+
1rowinset(0.00sec)

總結(jié):locate、position和instr的差別只是參數(shù)的位置不同,同時(shí)locate多一個(gè)起始位置的參數(shù)外,兩者是一樣的。

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

速度上前3個(gè)要比用like稍快一點(diǎn)。(不過(guò)這四個(gè)函數(shù)都不能使用索引)

下面為再為大家介紹一下Mysql中Like的使用方法

MySQL的like語(yǔ)句中的通配符:百分號(hào)、下劃線和escape

%:表示任意個(gè)或多個(gè)字符。可匹配任意類(lèi)型和長(zhǎng)度的字符。

Sql代碼

select * from user where username like '%huxiao'; 

select * from user where username like 'huxiao%'; 

select * from user where username like '%huxiao%';

另外,如果需要找出u_name中既有“三”又有“貓”的記錄,請(qǐng)使用and條件

SELECT * FROM [user] WHERE u_name LIKE ‘%三%' AND u_name LIKE ‘%貓%'

若使用 SELECT * FROM [user] WHERE u_name LIKE ‘%三%貓%'

雖然能搜索出“三腳貓”,但不能搜索出符合條件的“張貓三”。

_:表示任意單個(gè)字符。匹配單個(gè)任意字符,它常用來(lái)限制表達(dá)式的字符長(zhǎng)度語(yǔ)句:(可以代表一個(gè)中文字符)
 

Sql代碼  

select * from user where username like '_'; 

select * from user where username like 'huxia_'; 

select * from user where username like 'h_xiao'; 

 如果我就真的要查%或者_(dá),怎么辦呢?使用escape,轉(zhuǎn)義字符后面的%或_就不作為通配符了,注意前面沒(méi)有轉(zhuǎn)義字符的%和_仍然起通配符作用

Sql代碼  

select username from gg_user where username like '%xiao/_%' escape '/';

select username from gg_user where username like '%xiao/%%' escape '/';

MySQL 通配符

SQL的模式匹配允許你使用“_”匹配任何單個(gè)字符,而“%”匹配任意數(shù)目字符(包括零個(gè)字符)。在 MySQL中,SQL的模式缺省是忽略大小寫(xiě)的。下面顯示一些例子。

注意在你使用SQL模式時(shí),你不能使用=或!=;而使用LIKE或NOT LIKE比較操作符。

為了找出以“b”開(kāi)頭的名字:

mysql> SELECT * FROM pet WHERE name LIKE "b%";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

為了找出以“fy”結(jié)尾的名字:

mysql> SELECT * FROM pet WHERE name LIKE "%fy";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+

為了找出包含一個(gè)“w”的名字:

mysql> SELECT * FROM pet WHERE name LIKE "%w%";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+

為了找出包含正好5個(gè)字符的名字,使用“_”模式字符:

mysql> SELECT * FROM pet WHERE name LIKE "_____";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

由MySQL提供的模式匹配的其他類(lèi)型是使用擴(kuò)展正則表達(dá)式。當(dāng)你對(duì)這類(lèi)模式進(jìn)行匹配測(cè)試時(shí),使用REGEXP和NOT REGEXP操作符(或RLIKE和NOT RLIKE,它們是同義詞)。

擴(kuò)展正則表達(dá)式的一些字符是:

“.”匹配任何單個(gè)的字符。

一個(gè)字符類(lèi)“[...]”匹配在方括號(hào)內(nèi)的任何字符。

例如,“[abc]”匹配“a”、“b”或“c”。為了命名字符的一個(gè)范圍,使用一個(gè)“-”。“[a-z]” 匹配任何小寫(xiě)字母,而“[0-9]”匹配任何數(shù)字。

“ * ”匹配零個(gè)或多個(gè)在它前面的東西。

例如,“x*”匹配任何數(shù)量的“x”字符,“[0-9]*”匹配的任何數(shù)量的數(shù)字,而“.*”匹配任何數(shù)量的任何東西。

正則表達(dá)式是區(qū)分大小寫(xiě)的,但是如果你希望,你能使用一個(gè)字符類(lèi)匹配兩種寫(xiě)法。

例如,“[aA]”匹配小寫(xiě)或大寫(xiě)的“a”而“[a-zA-Z]”匹配兩種寫(xiě)法的任何字母。

如果它出現(xiàn)在被測(cè)試值的任何地方,模式就匹配(只要他們匹配整個(gè)值,SQL模式匹配)。

為了定位一個(gè)模式以便它必須匹配被測(cè)試值的開(kāi)始或結(jié)尾,在模式開(kāi)始處使用“^”或在模式的結(jié)尾用“$”。

為了說(shuō)明擴(kuò)展正則表達(dá)式如何工作,上面所示的LIKE查詢?cè)谙旅媸褂肦EGEXP重寫(xiě):

為了找出以“b”開(kāi)頭的名字,使用“^”匹配名字的開(kāi)始并且“[bB]”匹配小寫(xiě)或大寫(xiě)的“b”:

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";
+--------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+------------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+--------+---------+------+------------+------------+

為了找出以“fy”結(jié)尾的名字,使用“$”匹配名字的結(jié)尾:

mysql> SELECT * FROM pet WHERE name REGEXP "fy$";
+--------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+

為了找出包含一個(gè)“w”的名字,使用“[wW]”匹配小寫(xiě)或大寫(xiě)的“w”:

mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";
+----------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+------------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
+----------+-------+---------+------+------------+------------+

既然如果一個(gè)正規(guī)表達(dá)式出現(xiàn)在值的任何地方,其模式匹配了,就不必再先前的查詢中在模式的兩方面放置一個(gè)通配符以使得它匹配整個(gè)值,就像如果你使用了一個(gè)SQL模式那樣。

 為了找出包含正好5個(gè)字符的名字,使用“^”和“$”匹配名字的開(kāi)始和結(jié)尾,和5個(gè)“.”實(shí)例在兩者之間:

mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

你也可以使用“{n}”“重復(fù)n次”操作符重寫(xiě)先前的查詢:

mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$";
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

以上是Mysql模糊搜索方法Like的使用方法,與前l(fā)ocate instr position這三個(gè)內(nèi)置函數(shù)相比性能上要慢些,無(wú)論哪種模糊搜索在查詢時(shí)都會(huì)消耗大量服務(wù)器資源所以在實(shí)際工作中我們應(yīng)盡量少用模糊搜索

您可能感興趣的文章:
  • mysql中find_in_set()函數(shù)的使用及in()用法詳解
  • MySQL的FIND_IN_SET函數(shù)使用方法分享
  • mysql中find_in_set()函數(shù)的使用詳解
  • mysql通過(guò)find_in_set()函數(shù)實(shí)現(xiàn)where in()順序排序
  • mysql中find_in_set函數(shù)的基本使用方法

標(biāo)簽:宿遷 黔南 賀州 黃山 南充 蘭州 馬鞍山 佛山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL高效模糊搜索之內(nèi)置函數(shù)locate instr position find_in_set使用詳解》,本文關(guān)鍵詞  MySQL,高效,模糊,搜索,之,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL高效模糊搜索之內(nèi)置函數(shù)locate instr position find_in_set使用詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于MySQL高效模糊搜索之內(nèi)置函數(shù)locate instr position find_in_set使用詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 企业400电话

    智能AI客服机器人
    15000

    在线订购

    合计11份范本:公司章程+合伙协议+出资协议+合作协议+股权转让协议+增资扩股协议+股权激励+股东会决议+董事会决议

    推薦文章
    主站蜘蛛池模板: 柳州市| 独山县| 新邵县| 丽江市| 凤山市| 六枝特区| 来安县| 随州市| 句容市| 綦江县| 象州县| 泰州市| 安达市| 平顶山市| 任丘市| 上林县| 宁乡县| 遂溪县| 青神县| 合川市| 昌都县| 资阳市| 桦南县| 伊川县| 高淳县| 鸡泽县| 刚察县| 玛多县| 益阳市| 西林县| 虎林市| 蓬溪县| 泰安市| 新巴尔虎右旗| 井冈山市| 岑巩县| 宝兴县| 大冶市| 迁安市| 曲麻莱县| 清新县|