开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情
一、前言
大家好,今天文章的内容是两个文本函数的记录:
Make_Set( )Find_In_Set( )
二、内容
Make_Set
Make_Set()函数用于返回一个集合值,该集合由设置了位中相应位的字符串组成。简单来说,就是根据参数bits,生成一个使用逗号分隔的字符串。
具体语法如下:
Make_Set(bits, str1, str2, str3,...)
记录:
- 首先,MySQL 会将十进制数
bits转换为二进制数 - 接着利用该二进制数中 1 的位置(从右往左读),来组合设置各个字符串形成新字符串,若干字符串之间用逗号隔开
- 以
select Make_Set(bits,'a','b','c','d');为例,并且二进制数是 4 位(参数中有4个字符串) - 如果
bits为1,那么二进制数为0001,此时只取字符串str1,即a - 如果
bits为2,那么二进制数为0010,此时只取字符串str2,即b - 如果
bits为3,那么二进制数为0011,此时取字符串str1和str2,即a,b - 如果
bits为5,那么二进制数为0101,此时取字符串str1和str3,即a,c - 如果
bits为10,那么二进制数为1010,此时取字符串str2和str4,即b,d - 如果
bits为14,那么二进制数为1110,此时取字符串str2、str3和str4,即b,c,d - 如果
bits为15,那么二进制数为1111,此时取字符串str1、str2、str3和str4,即a,b,c,d
代码如下:
mysql> select Make_Set(1,'a','b','c','d');
+-----------------------------+
| Make_Set(1,'a','b','c','d') |
+-----------------------------+
| a |
+-----------------------------+
1 row in set (0.00 sec)
mysql> select Make_Set(2,'a','b','c','d');
+-----------------------------+
| Make_Set(2,'a','b','c','d') |
+-----------------------------+
| b |
+-----------------------------+
1 row in set (0.00 sec)
mysql> select Make_Set(3,'a','b','c','d');
+-----------------------------+
| Make_Set(3,'a','b','c','d') |
+-----------------------------+
| a,b |
+-----------------------------+
1 row in set (0.00 sec)
mysql> select Make_Set(5,'a','b','c','d');
+-----------------------------+
| Make_Set(5,'a','b','c','d') |
+-----------------------------+
| a,c |
+-----------------------------+
1 row in set (0.00 sec)
mysql> select Make_Set(10,'a','b','c','d');
+------------------------------+
| Make_Set(10,'a','b','c','d') |
+------------------------------+
| b,d |
+------------------------------+
1 row in set (0.00 sec)
mysql> select Make_Set(14,'a','b','c','d');
+------------------------------+
| Make_Set(14,'a','b','c','d') |
+------------------------------+
| b,c,d |
+------------------------------+
1 row in set (0.00 sec)
mysql> select Make_Set(15,'a','b','c','d');
+------------------------------+
| Make_Set(15,'a','b','c','d') |
+------------------------------+
| a,b,c,d |
+------------------------------+
1 row in set (0.00 sec)
Find_In_Set
Find_In_Set(str, strlist)函数用于在字符串列表strlist中查找子串str的位置。
注意:
- 在函数
Find_In_Set()中,如果传入的第一个参数str中含有逗号,那么该函数无法正常运行(返回0)。- 如果
str不在strlist中或strlist为空字符串,则返回 0。- 如果任一参数为
NULL,则返回NULL。
举个例子:
mysql> select Find_In_Set('Cc','Aa,Bb,Cc,Dd');
+---------------------------------+
| Find_In_Set('Cc','Aa,Bb,Cc,Dd') |
+---------------------------------+
| 3 |
+---------------------------------+
1 row in set (0.00 sec)
mysql> select Find_In_Set('Cc,','Aa,Bb,Cc,Dd');
+----------------------------------+
| Find_In_Set('Cc,','Aa,Bb,Cc,Dd') |
+----------------------------------+
| 0 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select Find_In_Set('EE','Aa,Bb,Cc,Dd');
+---------------------------------+
| Find_In_Set('EE','Aa,Bb,Cc,Dd') |
+---------------------------------+
| 0 |
+---------------------------------+
1 row in set (0.00 sec)
三、后话
好了,今天的文章内容就到这里,感谢观看。