MAKE_SET
描述
MAKE_SET 函数根据位掩码(bit)从多个字符串中选择组合。返回一个由逗号分隔的字符串集合,集合中包含所有对应位为 1 的字符串。
行为与 MySQL 中的 MAKE_SET 一致。
语法
MAKE_SET(<bit>, <str1>[, <str2>, ...])
参数
| 参数 | 说明 |
|---|---|
<bit> | 位掩码值,用二进制位表示选择哪些字符串。类型:BIGINT |
<str1>, <str2>, ... | 待组合的字符串参数(可变参数)。类型:VARCHAR |
返回值
返回 VARCHAR 类型,为由逗号分隔的字符串集合。
特殊情况:
- 如果
<bit>为 NULL,返回 NULL - 如果对应位为 1 的字符串为 NULL,跳过该字符串
- 如果对应位超出参数范围,忽略该位
- 二进制位从右到左计数,第 0 位对应第一个字符串参数
<bit>为 0 时返回空字符串
示例
- 基本用法:bit = 3(二进制 011,选择第 0 位和第 1 位)
SELECT make_set(3, 'dog', 'cat', 'bird');
+-----------------------------------+
| make_set(3, 'dog', 'cat', 'bird') |
+-----------------------------------+
| dog,cat |
+-----------------------------------+
- 跳过 NULL 值:bit = 5(二进制 101,选择第 0 位和第 2 位)
SELECT make_set(5, NULL, 'warm', 'hot');
+---------------------------------+
| make_set(5, NULL, 'warm', 'hot') |
+---------------------------------+
| hot |
+---------------------------------+
- bit 为 0:不选择任何字符串
SELECT make_set(0, 'hello', 'world');
+--------------------------------+
| make_set(0, 'hello', 'world') |
+--------------------------------+
| |
+--------------------------------+
- NULL 值处理
SELECT make_set(NULL, 'a', 'b', 'c');
+-------------------------------+
| make_set(NULL, 'a', 'b', 'c') |
+-------------------------------+
| NULL |
+-------------------------------+
- 位超出参数范围:bit = 15(二进制 1111,选择 4 位,但只有 2 个参数)
SELECT make_set(15, 'first', 'second');
+-------------------------------------+
| make_set(15, 'first', 'second') |
+-------------------------------------+
| first,second |
+-------------------------------------+
- UTF-8 特殊字符支持
SELECT make_set(7, 'ṭṛì', 'ḍḍumai', 'test');
+------------------------------------------+
| make_set(7, 'ṭṛì', 'ḍḍumai', 'test') |
+------------------------------------------+
| ṭṛì,ḍḍumai,test |
+------------------------------------------+
Keywords
MAKE_SET