GBase 8s
适配迁移
文章
GBase 8s自定义使用find_in_set()函数
GBase社区管理员发表于2019-12-16 17:17:002485次浏览10个评论
从mysql迁移到GBase 8s数据库时,原有find_in_set函数在GBase 8s中不可用,因此需要自己创建相应的函数,可以使用C或者JAVA创建自定义例程,也可以使用存储过程。以下以存储过程方式创建。
该函数实现的功能是:第一个参数str在第二个参数strlist(以,分隔的字符串)中的分隔位置。
```sql
drop function if exists find_in_set;
create function find_in_set(str varchar(255),strlist lvarchar(10000)) returns int;
define currp int; -- 当前位置
define lastp int; -- 上次位置
define sepnum int;
define strlen int;
define strtmp lvarchar(10000);
let lastp = 1;
let sepnum = 0;
let strtmp = strlist || ","; -- 追加一个分隔符','
let strlen = length(strtmp);
FOR currp = 1 TO strlen
IF substr(strtmp,currp,1) = ',' THEN
let sepnum = sepnum + 1;
IF substr(strtmp,lastp,currp - lastp) = str THEN
RETURN sepnum;
END IF;
let lastp = currp + 1;
END IF;
END FOR;
RETURN 0;
end function;
```
**示例:**
```sql
select find_in_set('南大','南大通用,天津南大通用,南大,南大通用北京,广东南大通用') from dual;
```
得到的结果如下:
```text
|(expression) |
|-------------|
|3 |
```
评论
登录后才可以发表评论
GBase用户17541发表于 2年前
这个sql在gbase8s中执行的时候报语法错误,怎么解决呢

GBase用户17541发表于 2年前

GBase用户28017发表于 10个月前
你的文章和GBase8c安装输出的日志一样乱。呵。
星雨楼发表于 10个月前
顶一下
枫溪发表于 8个月前
顶一下
GBase用户31099发表于 7个月前
123
GBase用户31099发表于 7个月前
234
GBase用户31099发表于 7个月前
456
GBase用户31099发表于 7个月前
666
GBase用户31099发表于 7个月前
路过
热门帖子
- 12025-12-01浏览数:182759
- 22023-05-09浏览数:25052
- 42023-09-25浏览数:18521
- 52020-05-11浏览数:17526