MySQL之FIND_IN_SET()的用法及說明
一、語法
FIND_IN_SET(str,strlist)
str
:要查詢的字符串strList
:一個被,
號分隔開的字符串- 函數(shù)是返回strList中str所在的位置索引
二、用法
SELECT FIND_IN_SET(‘e’, ‘a,b,c,d’);
結(jié)果是0SELECT FIND_IN_SET(‘b’, ‘a,b,c,d’);
結(jié)果是2:因為b在strlist集合中放在2的位置,從1開始SELECT FIND_IN_SET(‘c’, ‘a,b,c,d’);
結(jié)果是3
和in、like的區(qū)別
find_in_set(str,strlist)函數(shù)是用變量,strlist內(nèi)容是逗號分隔的字符串
in
后面是要常量,表示一個個羅列,in(‘11’,‘12’,‘13’)like
是模糊匹配,find_in_set是精確匹配
三、用途
舉個例子一
當數(shù)據(jù)庫表中,存在有逗號拼接的字符串的字段時,查詢時候用FIND_IN_SET函數(shù)。
# 創(chuàng)建表 CREATE TABLE IF NOT EXISTS tb_test1( `id` INT(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL COMMENT '名字', `type` varchar(255) NOT NULL COMMENT '類型: 1表示金卡;2表示銀卡;3表示銅卡', PRIMARY KEY (`id`) )ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = 'FIND_IN_SET使用'; # 新增數(shù)據(jù) INSERT INTO tb_test1(name,type) VALUES('edg','1,2,3'); INSERT INTO tb_test1(name,type) VALUES('rng','2,3'); INSERT INTO tb_test1(name,type) VALUES('ig','1,3'); # 查詢 SELECT * FROM tb_test1 WHERE FIND_IN_SET('1',type); # 返回type中包含1的記錄
舉個例子二
一張部門表中,有個userIds字段,存放的是關(guān)聯(lián)的部門下用戶的id;比如:‘111,112,113’。
然后需要查詢返回的結(jié)果是,Dept對象中帶有user的對象數(shù)組。
CREATE TABLE IF NOT EXISTS dept( `id` INT(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL COMMENT '部門名字', `user_ids` text DEFAULT NULL COMMENT '部門人員', PRIMARY KEY (`id`) )ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '部門表';
<resultMap id="ResultMap" type="com.test.entity.dept" > <id column="id" property="id" jdbcType="INTEGER" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="user_ids" property="userIds" jdbcType="VARCHAR" /> <association property="Users" resultMap="Usesr_map" /> // 在實體類中有List<User> Users </resultMap> <sql id="User_Column_List" > user.id user_id, user.name user_name </sql> <resultMap id="Usesr_map" type="com.test.entity.User"> <id column="user_id" property="id" jdbcType="INTEGER" /> <result column="user_name" property="name" jdbcType="VARCHAR" /> </resultMap> <!-- 只返回user_ids中包含的id的user記錄 --> <select id="selectOne" resultMap="ResultMap" parameterType="INTEGER" > SELECT e.id id,e.name name,e.user_ids user_ids, <include refid="User_Column_List"/> FROM dept e LEFT JOIN User user ON FIND_IN_SET(user.id,e.user_ids) WHERE e.id = #{e.id} </select>
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- MySQL的FIND_IN_SET函數(shù)使用方法分享
- Mysql中的find_in_set的使用方法介紹
- Mysql中FIND_IN_SET()和IN區(qū)別簡析
- mysql通過find_in_set()函數(shù)實現(xiàn)where in()順序排序
- MySQL中find_in_set()函數(shù)用法示例詳解
- Mysql中find_in_set()函數(shù)用法詳解以及使用場景
- mysql查詢FIND_IN_SET?REGEXP實踐示例
- MySQL中的FIND_IN_SET函數(shù)的使用場景
- mysql中find_in_set()函數(shù)用法及自定義增強函數(shù)詳解
- Mysql中FIND_IN_SET函數(shù)的使用及問題
- MySQL FIND_IN_SET函數(shù)的使用場景
相關(guān)文章
詳解Mysql數(shù)據(jù)庫date, datetime類型設(shè)置0000-00-00默認值(default)報錯問題
這篇文章主要介紹了詳解Mysql數(shù)據(jù)庫date, datetime類型設(shè)置0000-00-00默認值(default)報錯問題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01MySQL按天分組統(tǒng)計一定時間內(nèi)的數(shù)據(jù)實例(沒有數(shù)據(jù)補0)
我們在用Mysql制作數(shù)據(jù)可視化圖表時候,經(jīng)常需要按照天對數(shù)據(jù)進行分組統(tǒng)計,下面這篇文章主要給大家介紹了關(guān)于MySQL按天分組統(tǒng)計一定時間內(nèi)的數(shù)據(jù),沒有數(shù)據(jù)補0的相關(guān)資料,需要的朋友可以參考下2023-03-03與MSSQL對比學習MYSQL的心得(八)--插入 更新 刪除
這一篇《與MSSQL對比學習MYSQL的心得(八)》將會講解MYSQL的插入、更新和刪除語句2014-08-08