程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQLFIND_IN_SET(str,strlist)函數

MySQLFIND_IN_SET(str,strlist)函數

編輯:MySQL綜合教程

1、函數簡介

FIND_IN_SET(str,strlist)

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

mysql> SELECT FIND_IN_SET('b','a,b,c,d');

-> 2

2、FIND_IN_SET 和 IN 的區別

網上現成的代碼,拿過來用一下:

CREATE TABLE `test` (

`id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`list` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `test` VALUES (1, 'name', 'daodao,www.111cn.net,xiaoqin');

INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,www.111cn.net');

執行語句如下:

sql1: SELECT id, LIST, NAME FROM test WHERE 'daodao' IN (LIST);

sql2: SELECT id, LIST, NAME FROM test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao');

執行結果如下:

sql1 查詢結果為空

\

sql2能夠查詢出數據

\

為什麼sql1不能取得正確的結果,而sql2卻能取得結果?

是因為sql1中 IN (list), list 是變量,而sql2中 IN ('libk', 'zyfon', 'daodao'),('libk', 'zyfon', 'daodao')是常量。mysql中In是比較等不等,此處‘list’是表中的一個字段,也就是變量,除非它的值剛好和name的值一樣,否則返回的結果都為空。如果要讓sql1能查處正確的結果,需要用FIND_IN_SET()函數。mysql中FIND_IN_SET函數用來比較是不是包含,不管‘list’字段是變量或給定的字符串常量都能很好的工作。

sql3:SELECT id, LIST, NAME FROM `test` WHERE FIND_IN_SET('daodao',`list`);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved