mysql中IFIND_IN_SET和like的區別


  在數據庫中新建一張測試表t_user,包含三個字段'id','name','grilfriend',字段很容易看出,這是記錄一個人的女朋友的表,注意這里的‘firlfriend’字段可以是多個人名,之間用逗號分開,如‘楊冪01,楊冪02’;這樣的數據存儲我們也經常見到。

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `girlfriend` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

插入幾條測試數據

INSERT INTO `t_user` VALUES ('1', '狗蛋', '林心如8,安以軒8,范冰冰8');
INSERT INTO `t_user` VALUES ('2', '狗剩', '林心如88,楊冪8,楊穎8');
INSERT INTO `t_user` VALUES ('3', '石頭', '范冰冰88,楊穎88');

數據顯示如下:

下面我想查詢'grilfrind中'包含”楊穎8″是誰的女朋友:

like 查詢:

SELECT * from t_user where girlfriend like '%楊穎8%'

FIND_IN_SET查詢:

SELECT * from t_user where FIND_IN_SET('楊穎8',girlfriend)

 

下面我想查詢'grilfrind中'包含”楊穎88″是誰的女朋友:

like 查詢:

SELECT * from t_user where girlfriend like '%楊穎88%'

FIND_IN_SET查詢:

SELECT * from t_user where FIND_IN_SET('楊穎88',girlfriend)

結論:like是廣泛的模糊匹配,字符串中沒有分隔符,Find_IN_SET 是精確匹配,字段值以英文”,”分隔,Find_IN_SET查詢的結果要小於like查詢的結果。

附加:函數簡介

FIND_IN_SET(str,strlist)

假如字符串str 在由N 子鏈組成的字符串列表strlist 中, 則返回值的范圍在 1 到N 之間 。一個字符串列表就是一個由一些被‘,’符號分開的自鏈組成的字符串。如果第一個參數是一個常數字符串,而第二個是type SET列,則 FIND_IN_SET() 函數被優化,使用比特計算。如果str不在strliststrlist 為空字符串,則返回值為 0 。如任意一個參數為NULL,則返回值為 NULL。 這個函數在第一個參數包含一個逗號(‘,’)時將無法正常運行。


免責聲明!

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



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