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) 查询字 ...
随机推荐
- Bootstrap3组件--1
目录 1. Glyphicons字体图标 2.下拉菜单 3.按钮组 4. 输入框组 5.导航 6. 导航条 7. 路径导航 1. Glyphicons字体图标 出于性能的考虑,所有图标都需要一个基类 ...
- tomcat 日志禁用
1.禁用catalina.out日志通过修改catalina.sh配置可以控制tomcat不生成该文件只要将if [ -z "$CATALINA_OUT" ] ; then CAT ...
- LeetCode——max-points-on-a-line
Question Given n points on a 2D plane, find the maximum number of points that lie on the same straig ...
- 设置本地wamp环境挂载多站点同时运行
之前写过一篇关于在Linux环境下配置虚拟主机的文章:现在又有一种场景:在本地同时写多个项目:可本地的wamp环境下默认只有一个www目录:这样经常修改目录很痛苦:那么幸福就这么猝不及防的来了:下面就 ...
- super和this 在构造方法上的用法
super Super()表示调用父类的构造方法.如果没有定义构造方法,那么就会调用父类的无参构造方法,即super(). this 在构造方法中,this表示本类的其他构造方法:student(st ...
- BASE64Encoded() 方法报错说方法未定义
代码: String enParams = new BASE64Encoder().encode(strParams.getBytes()); 出错,显示方法未定义 解决方法:项目右键——>pr ...
- Vue v-if条件渲染
1.简单的v-if指令,代码如下 <!DOCTYPE html> <html> <head lang="en"> <meta charse ...
- eclipse build path 以及 clean(转)
1.设置"source folder"与"output folder". source folder:存放.Java源文件的根目录:output folder: ...
- nova Rescue 和 Unrescue
usage: nova rescue [--password <password>] [--image <image>] <server> Reboots a se ...
- CSS媒体查询 width VS device-width
In CSS media the difference between width and device-width can be a bit muddled, so lets expound on ...