MySQL MAKE_SET() 函数



MySQL 的MAKE_SET()函数用于根据给定的位(位集合)检索字符串值(以逗号分隔)。

此函数接受以“|”分隔的位值和一系列字符串作为参数,并返回一个字符串,其中每个位值都被替换为来自一系列字符串的对应值。

语法

以下是 MySQL MAKE_SET() 函数的语法:

MAKE_SET(bits,str1,str2,...)

参数

此函数采用数值和字符串列表作为参数。

返回值

此函数返回一个逗号分隔的字符串,其中整数的每个位位置对应于相应字符串的包含或排除。

示例

在下面的示例中,我们使用位值为 3 的 MAKE_SET() 函数。3 的二进制表示为“11”,即两个位置都为 1。因此,它从字符串序列“apple”、“banana”、“mango”和“grapes”中返回“apple”和“banana”,因为它们的位置对应于二进制位:

SELECT MAKE_SET(3,'apple','banana','mango', 'grapes');

以上代码的输出如下:

MAKE_SET(3,'apple','banana','mango', 'grapes')
apple,banana

示例

这里,第一个位是 1 即 001,最右边的数字是 1,因此它返回 'apple'(第一位),第二个位是 4 即 100,第三个位置是 1(从右到左),因此它返回 'mango':

SELECT MAKE_SET(1|4,'apple','banana','mango', 'grapes');

以上代码的输出如下:

MAKE_SET(1|4,'apple','banana','mango', 'grapes')
apple,mango

示例

即使重复使用多个位值,结果字符串也只包含这些值一次(无重复):

SELECT MAKE_SET(3|3|3|3,'apple','banana','mango', 'grapes');

获得的输出如下:

MAKE_SET(3|3|3|3,'apple','banana','mango', 'grapes')
apple,banana

示例

如果在字符串序列中将 NULL 值作为位传递,则它们不会包含在结果中(无 NULL 值):

SELECT MAKE_SET(3|2,'Java', NULL, 'JavaFX','OpenCV', NULL, 'CoffeeScript', 'WebGL');

产生的结果如下:

MAKE_SET(3|2,'Java', NULL, 'JavaFX','OpenCV', NULL, 'CoffeeScript', 'WebGL')
Java,JavaFX,OpenCV,CoffeeScript,WebGL

示例

如果传递给此函数的任何参数为 NULL,则返回 NULL:

SELECT LOCATE(NULL, 'Tutorialspoint');

以上代码的输出如下:

LOCATE(NULL, 'Tutorialspoint')
NULL

示例

您还可以将一系列数字而不是字符串作为参数传递给此函数:

SELECT MAKE_SET(5, 558, 5558, 66988, 6547, 669, 368);

执行上述代码后,我们得到以下输出:

MAKE_SET(5, 558, 5558, 66988, 6547, 669, 368)
558,66988
mysql-make-set-function.htm
广告