mysql函数之三:find_in_set() 函数 返回str在字符串集strlist中的序号
如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N。
FIND_IN_SET(str,strlist)
如果字符串str是在的strlist组成的N子串的字符串列表,返回值的范围为1到N。
一个字符串列表就是一个由一些被 ‘,’ 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。
如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。
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)
有点类似in (集合)
| 代码如下 | 复制代码 |
|
select * from treenodes where id in (1,2,3,4,5); |
|
弄个测试表来说明两者的区别
| 代码如下 | 复制代码 |
|
CREATE TABLE `test` ( INSERT INTO `test` VALUES (1, 'name', 'daodao,www.111cn.net,xiaoqin'); |
|
原来以为MySQL可以进行这样的查询:
| 代码如下 | 复制代码 |
| select id, list, name from table where 'daodao' IN (list); | |
(一)
实际上这样是不行的,这样只有当name是list中的第一个元素时,查询才有效,否则都得不到结果,即使'daodao'真的在list中。
再来看看这个:
| 代码如下 | 复制代码 |
| select id, list, name from table where 'daodao' IN ('libk', 'zyfon', 'daodao'); | |
(二)
这样是可以的。
----------------------------------------------------------------
这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。
原因其实是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。
所以如果要让(一)能正确工作,需要用find_in_set():
| 代码如下 | 复制代码 |
| select id, list, name from table where find_in_set('daodao',list); | |
(一)的改进版。
总结:
所以如果list是常量,则可以直接用IN, 否则要用find_in_set()函数。
mysql函数之三:find_in_set() 函数 返回str在字符串集strlist中的序号的更多相关文章
- group_concat函数与find_in_set()函数相结合
一:group_concat函数详解 1.语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'] ...
- 【mysql函数】FIND_IN_SET函数用法
当你的数据存储为一下格式时,想查出带有某个id的所有数据时,FIND_IN_SET这个函数可以帮到你. ',C_BranchId)
- mysql 分页存储过程 一次返回两个记录集(行的条数,以及行记录),DataReader的Read方法和NextResult方法
DELIMITER $$ USE `netschool`$$ DROP PROCEDURE IF EXISTS `fn_jk_GetCourses`$$ CREATE DEFINER=`root`@` ...
- mysql中find_in_set()函数的使用
首先举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文等等 .现在有篇文章他既是头条,又是热点,还是图文,type中以 1,3,4 的格式存储.那我 ...
- MySQL 的 find_in_set 函数使用方法
举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文...1,12,13 等等 . 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1, ...
- mysql 的 find_in_set函数使用方法
举个例子来说: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1 ...
- (转)mysql 的 find_in_set函数使用方法
举个例子来说: 有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1 ...
- MySQL的FIND_IN_SET()函数
今天在做项目时,看到了一个从没见过的MySQL函数——FIND_IN_SET(),顿时就产生了浓郁的兴趣,然后就搜了搜,翻了翻. 语法:FIND_IN_SET(str,strlist) 定义: 1. ...
- mysql find_in_set()函数的使用
mysql 中 find_in_set() 函数语法: FIND_IN_SET(str,strList) str 要查询的字符串 strList 字段名,参数以“,”分隔,如(1,2,6,8) 查询字 ...
随机推荐
- mysql错误总结-ERROR 1067 (42000): Invalid default value for TIMESTAMP
1. ERROR 1067 (42000): Invalid default value for 'FAILD_TIME' (对TIMESTAMP 类型的子段如果不设置缺省值或没有标志not n ...
- SharedPreferences概述
SharedPreferences概述 一.简介 SharedPreferences简介 上图紫色标注的部分为使用方法. SharedPreferences成员(属性和方法) 二.核心函数及使用实例 ...
- CSS基础(滑动门,雪碧图,网页布局)
3.11.2017 这一篇主要是关于滑动门技术的学习,还有雪碧图(sprite),也就是精灵图,还有一点昨天的css可见性的回顾,下面先来回顾下吧 CSS可见性(元素可见性) overflow: hi ...
- VS2010 + QT 5 +open inventor 环境配置
本科毕业设计做的是 随钻测量的井眼轨迹和测井曲线的三维显示 要求的环境是 QT + Open Inventor 在寒假开学前,打算将环境配置好,开学后再正式编码实现,可是....环境也 ...
- sp_rename sqlserver 表 列 索引 类型重命名
--[语法] sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name' [ , [ @objtype = ] 'object ...
- 解决:创建Android模拟器时提示“No system images installed for target”
今天在Eclipse上创建安卓模拟器,但发现CPU/ABI一项显示为“No system images installed for target”: 在网上搜索答案,在叶超Luka的博客中找到了答案, ...
- ZOJ - 3430 ac自动机
这题主要就是解码过程很恶心,不能用char存,一共wa了20发 题意:先给n串加密后的字符,然后m串加密后的字符,解码之后求n对应每个m的匹配数,很显然的ac自动机 加密过程是先用对应ascii表的标 ...
- 按住说话 speex压缩
demo下载 speex要用自己的包名.类名 用ndk-build生成so文件,再删除jni文件使用
- (转)SPFA算法
原文地址:http://www.cnblogs.com/scau20110726/archive/2012/11/18/2776124.html 粗略讲讲SPFA算法的原理,SPFA算法是1994年西 ...
- unix的输入输出操作
unix的输入输出操作 使用的头文件 #include <unistd.h> #include <stdio.h> 函数说明 ssize_t read(int fd, void ...