MySQL MAKE_SET() 函数使用指南

MySQL MAKE_SET() 函数返回一个逗号分隔的字符串集合,该函数通过第一个参数对应的二进制决定是否其他字符串参数是否添加到结果集合中。

MAKE_SET() 语法

这里是 MySQL MAKE_SET() 函数的语法:

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

参数

bits
必需的。一个数字。将 bits 转为二进制并反转后的各个位决定 str1, str2, ... 是否出现在结果中。
str1, str2, ...
必需的。备选字符串。str1, str2, ... 分别由 bits 二进制并反转后的值中的第 1, 2, ... 决定是否出现在结果中。

返回值

MAKE_SET() 函数从 str1, str2, ... 根据 bits 对应的二进制并反转后的值挑选对应的字符串,并返回一个逗号分隔的字符串集合。

参数 str1, str2, ... 中的 NULL 不会出现结果中。

比如 bits = 66 对应的二进制是 110110 反转后 011,那么 MAKE_SET() 函数返回的结果是 str2,str3

如果 bits0MAKE_SET() 函数将返回空串。

MAKE_SET() 示例

SELECT
    MAKE_SET(0, 'a', 'b', 'c', 'd'),
    MAKE_SET(1, 'a', 'b', 'c', 'd'),
    MAKE_SET(2, 'a', 'b', 'c', 'd'),
    MAKE_SET(3, 'a', 'b', 'c', 'd'),
    MAKE_SET(4, 'a', 'b', 'c', 'd')\G
*************************** 1. row ***************************
MAKE_SET(0, 'a', 'b', 'c', 'd'):
MAKE_SET(1, 'a', 'b', 'c', 'd'): a
MAKE_SET(2, 'a', 'b', 'c', 'd'): b
MAKE_SET(3, 'a', 'b', 'c', 'd'): a,b
MAKE_SET(4, 'a', 'b', 'c', 'd'): c

这里,

  • bits = 11 对应的二进制是 1,反过来是 1,那么 'a' 对应的 1,因此返回 'a'
  • bits = 22 对应的二进制是 10,反过来是 01,参数 'a' 对应的 0,参数 'b' 对应的 1,因此返回 'b'
  • bits = 33 对应的二进制是 11,反过来是 11,参数 'a' 对应的 1,参数 'b' 对应的 1,因此返回 'a,b'
  • bits = 44 对应的二进制是 100,反过来是 001,参数 'a' 对应的 0,参数 'b' 对应的 0,参数 'c' 对应的 1,因此返回 'c'