find_in_set、export_set、make_set函数的使用
关键字:
find_in_set、export_set、make_set函数、人大金仓
1. 三个函数的概念
find_in_set、export_set、make_set这三个函数都是在KES的mysql模式下进行使用的,这其中包括三个函数中的set类型与enum类型,set类型与enum类型时mysql中的特殊类型,set类型类似于多选、enum类型类似于单选选项,下面的实际用例都将建立在set类型中进行举例
2.find_in_set函数的使用
该函数一共有三种常见的使用方法,一种为在创建的表中进行使用,一种为在字符串中进行调用,最后一种就是使用kes中的_set系统表进行结合使用,下面将挨个介绍一遍
(1)在表中进行使用(其中涉及到的set类型不再单独介绍)
create table t1(a set('ab','ac','qwrq','1','中国制造','','null'));
insert into t1 values ('ab'),(0);
select * from t1;
图中共有两行记录,其中第二行因为插入的是0索引,在set类型中对应的就是空,因此,第二行并没有数据,但是却有记录。
此时,对_set表进行查询
select * from _set;
查询结果如下,其中setlabel列对应的是创建的set中的元素值,第二列就是需要用到的settypid值,这个settypid值会在你创建的同一批set元素是相同的,不同批次的set是不相同的,find_in_set函数在这里的用法就是传入两个参数,第一个是setlabel值,第二个就是settypid值,返回的是set中对应元素的索引。
例如select find_in_set('qwrq',16384::oid);执行结果如下,可知qwrq在set中的索引为3.
(2)在第二个参数位的字符串使用,返回的值也是第一位参数对应的第二个参数的位置
select find_in_set('a','a,b,ab,df,12');,执行结果如下
(3)在表中进行使用,可以将数据与set类型中已有的数据进行对比,看是否存在与set类型中,不存在则返回空
create table t1(a set('ab','ac','qwrq','1','中国制造','','null'));
insert into t1 values ('ab'),(0);
insert into t1 values (3);
select * from t1 where find_in_set('ac',a);
3、export_set函数的使用
该函数共可以传入3、4、5个参数,并没与具体的限制,其中中间的参数可以是任意值。
以五个参数举例,其中第一个参数时需要转成二进制的参数,检查的顺序是从右往左看,第二个参数和第三个参数是分别代替第一个参数二进制结果的1和0,第四个参数就是第二个参数和第三个参数输出的中间的间隔值,第五个参数就是输出的长度。
当传入三个参数时,执行结果如下,默认的输出位数是64位,默认的间隔符为逗号
select export_set(63,'a','b');
传入四个参数时,中间间隔的符号换为第四个参数,输出位数仍然是64位
select export_set(63,'a','b','c');
当传入五个参数时,就可以控制输出的长度,例如输出长度为32位
对应的上述案例中的63的二进制值为
4、make_set函数的使用
函数的意思就是解析第一个参数的二进制,然后反过来看,是1的就打印出来,打印的就是第一个参数后面的跟着的对应的参数的位置,没有对应位置的就不打印
select make_set(64,'a','b','c','d','e','f','g','h','i','j');
对应的64的二进制为
那么对应的从右往左看为1的位置就是第七位,那么应该输出的是就是’g’,
select make_set(3,'a','b','c','d','e');
此时3的二进制为11,因此输出第一位与第二位。
参考资料
《KingbaseES SQL语言参考手册》