最近在学习 MySQL 的字符串函数时,发现了标题中的这个函数:EXPORT_SET(),百度了一下发现全部都是机翻的文章,经过一番实际操作终于搞懂了这个函数的准确意思,分享给大家。

语法

EXPORT_SET(bits,on,off[,separator[,number_of_bits]])

说明

这个函数将一个10进制的整数(bits),转换为二进制字符串,然后根据二进制字符串的每一位返回对应的on(对应1)和off(对应0),以连接符separator链接,计算长度由number_of_bits控制。其中对二进制字符串的位检查是从右到左(低位到高位),而返回的字符串从左到右。连接符separator默认为逗号(,),返回长度number_of_bits默认为64,这里会自动视为无符号整数,所以-1和64是相同的,如果number_of_bits大于二进制字符串位数,那么多余的位数由off填充。

上面的描述比较难以理解,下面举几个例子演示一下,大家就懂了。

示例

/*
  整数5的二进制值为'101',on参数设置为'On',off参数设置为'Off',连接符使用',',长度为4
  因此返回'101'每一位对应的'On'或'Off':'On,Off,On',长度为4,缺的1位补'Off',最终输出:
  'On,Off,On,Off'
*/
mysql> SELECT EXPORT_SET(5,'Y','N',',',4);
        -> 'On,Off,On,Off'

/*
  整数32的二进制值为'100100',on参数设置为'1',off参数设置为'0',连接符使用'-',长度为10
  因此返回'001001'(从右到左)每一位对应的'1'或'0':'0-0-1-0-0-1',长度为10,缺的4位补'0',最终输出:'0-0-1-0-0-1-0-0-0-0'
*/
mysql> SELECT EXPORT_SET(32,'1','0','-',10);
        -> '0-0-1-0-0-1-0-0-0-0'