如果字符串所在位置全部为 NULL,MySQL MAKE_SET() 函数会返回什么?

MAKE_SET()函数概述

MAKE_SET()函数是MySQL提供的字符串函数之一,用于将多个字符串合并成一个字符串,并以二进制形式返回。根据函数定义,MAKE_SET()函数指定每个字符串的位置,然后将它们合并到一起,生成一个字符串,其中指定的位置由状态值的数量决定。

通俗来讲,这个函数会将一组字符串拼接成一个字符串,每个字符串之间用“,”隔开,并根据参数指定每个字符串在结果字符串中对应的位置,返回一个二进制数据类型的字符串。

下面给出函数的语法:

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

其中:

bits:一个整数值。用于指定每个字符串在结果字符串中的位置。MySQL将为指定的bits值生成一个二进制数。例如:bits=4,将生成二进制数“00001000”,代表在结果字符串中第4个字符串存在。

str1, str2, ...:要合并的字符串。最多可以指定64个字符串。

如果字符串所在位置全部为NULL,MAKE_SET()会返回什么?

如果所有字符串的位置信息都为NULL,在使用MAKE_SET()函数后,将返回NULL值。这是因为返回的结果字符串至少有一位需要有值来表示位图,如果该位置的字符串内容为NULL,那么该位置在位图中对应的二进制位就为0或NULL,如果所有的字符串都为NULL,那么位图二进制字符串无法生成。

下面举个例子:

SELECT MAKE_SET(NULL,'str1', 'str2', 'str3');

执行这段代码后,结果集将会返回NULL。这是因为我们指定了所有的字符串都在NULL位置上,因此生成的位图不存在,导致返回值也是NULL。

下面的代码则不会返回NULL:

SELECT MAKE_SET(4,'str1', 'str2', 'str3');

执行这段代码后,结果集将会返回“str2”字符串,因为在该函数中,位置以二进制形式表示,4对应二进制数“00000100”,表示要返回结果字符串中的第4个字符串,所以返回了“str2”。

使用MAKE_SET()的例子

接下来我们看一个实际应用MAKE_SET()函数的例子。假设我们有一个表格名为“country”,其中包含以下字段:id、name、continent。现在我们想要在结果集中得到每个大洲(continent)中所包含的所有国家(name)。

为了达到这个目的,我们可以使用GROUP_CONCAT()函数配合MAKE_SET()函数来完成。

SELECT

continent,

GROUP_CONCAT(name) AS country_set,

MAKE_SET(1,MAX(name)= 'Canada',MAX(name)= 'USA',MAX(name)= 'Mexico',MAX(name)= 'Brazil',MAX(name)= 'Argentina',MAX(name)= 'Chile') AS country_bitmap

FROM

country

GROUP BY continent;

这个查询语句将返回以下结果:

+---------------+------------------------+----------------+

| continent | country_set | country_bitmap |

+---------------+------------------------+----------------+

| Africa | Algeria,Egypt,Morocco | 010 |

| Asia | China,India,Japan | 001 |

| Europe | France,Germany,UK | 011 |

| North America | Canada,USA,Mexico | 100 |

| South America | Brazil,Argentina,Chile | 110 |

+---------------+------------------------+----------------+

上面的结果中,第二列列出了每个大洲中的所有国家名称,而第三列则是表示同样的信息的二进制位图。比如,对于北美洲,我们需要在结果集中表示这样一种关系:如果这个国家在北美洲,对应的二进制位是1;如果不在,那么对应的二进制位是0。我们可以使用MAX()函数来生成这个位图。

同样的,由于这个函数也可以在条件语句中使用,有时候比其他逻辑运算函数方便,例如:

SELECT

MAKE_SET(7,ab = 1, ab = 2, ab = 3) AS ab_set

FROM

example_table;

这个查询语句将会返回一个三位的位图,表示“ab”字段在结果集中对应哪一行数据符合这个条件。如果一个字段对应的二进制位为1,那么满足该条件。

以上就是MAKE_SET()函数的基本用法以及在实际应用中如何使用的例子。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签