文本函数:Make_Set( ) 和 Find_In_Set( )

76 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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个字符串)
  • 如果 bits1,那么二进制数为 0001,此时只取字符串 str1,即a
  • 如果 bits2,那么二进制数为 0010,此时只取字符串 str2,即b
  • 如果 bits3,那么二进制数为 0011,此时取字符串 str1str2,即a,b
  • 如果 bits5,那么二进制数为 0101,此时取字符串 str1str3,即a,c
  • 如果 bits10,那么二进制数为 1010,此时取字符串 str2str4,即b,d
  • 如果 bits14,那么二进制数为 1110,此时取字符串 str2str3str4,即b,c,d
  • 如果 bits15,那么二进制数为 1111,此时取字符串 str1str2str3str4,即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)

三、后话

好了,今天的文章内容就到这里,感谢观看。