人大金仓数据库KingbaseES-find_in_set、export_set、make_set函数的使用

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语言参考手册》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值