首页 > 其他分享 >GBase 8s 自定义split_part函数

GBase 8s 自定义split_part函数

时间:2024-09-19 16:57:13浏览次数:12  
标签:自定义 int char field part split str define

gbase 数据 该函数的功能:以第二个参数separator_in分隔第一个参数str_in,返回第三个参数field_in指定字段。

drop function if exists split_part2;

create function split_part2( str_in lvarchar(2048), separator_in char(1), field_in int  )
  returning varchar(255) ;

  define str_len int;
  define pos_curr int;
  define count_field   int;
  define pos_char char(1);

  IF field_in <= 0 THEN return null; END IF;

  LET count_field   = 1;
  LET str_len = length(str_in);

  FOR pos_curr = 1 TO str_len
    LET pos_char = substr(str_in,pos_curr,1);
    IF pos_char = separator_in THEN
      LET count_field = count_field + 1;
    END IF;
  END FOR;

  IF field_in > count_field THEN
    return null;
  ELSE
    return SUBSTRING_INDEX(SUBSTRING_INDEX(str_in,separator_in,field_in),separator_in,-1);
  END iF;

end function;

或者,另一种实现方法

create function split_part( str_in lvarchar(2048), separator_in char(1), field_in int  )
returning varchar(255) ;

define res varchar(255);
define str_len int;
define pos_curr int;
define substr_start int;
define substr_length int;
define pos_char char(1);

IF field_in <= 0 THEN return ; END IF;

LET res = '';
LET substr_start = 0;
LET substr_length = 0;
LET str_len = length(str_in);

FOR pos_curr = 1 TO str_len

   LET pos_char = substr(str_in,pos_curr,1);
   IF pos_char = separator_in THEN
      LET field_in = field_in - 1;
   END IF;

   IF field_in = 1 and substr_start = 0 THEN
      LET substr_start = pos_curr + DECODE(pos_char,separator_in,1,0);
   END IF;

   IF field_in <= 0 THEN
      LET substr_length = pos_curr;
      EXIT FOR; 
   END IF;

END FOR;

IF substr_length = 0 THEN
   LET substr_length = str_len+1;
END IF;

IF substr_start = 0 THEN
   LET substr_start = str_len+1;
END IF;

IF substr_length < substr_start THEN
   LET substr_length = 0;
ELSE
   LET substr_length = substr_length - substr_start;
END IF;

RETURN NVL(substring ( str_in from substr_start for substr_length ),'');

end function;

示例: 以,分隔'aa,bb,cc,dd',返回第三个字段。

select split_part2('aa,bb,cc,dd',',',3) from dual;

结果: cc

标签:自定义,int,char,field,part,split,str,define
From: https://blog.51cto.com/u_16319042/12057757

相关文章

  • 易优eyoucms网站添加自定义新建字段的时候报错
    根据提供的错误信息 SQLSTATE[42000]:Syntaxerrororaccessviolation:1118Rowsizetoolarge.ThemaximumrowsizefortheusedtabletypenotcountingBLOBsis65535.YouhavetochangesomecolumnstoTEXTorBLOBs,这个错误表明数据库表的行大小超过了MySQL......
  • jeecg v3 表格自定义按钮打开Modal并传参
    List列表页面行内添加自定义按钮,弹出自定义页面分五步1.在template里加入<UrAdspotsMapModal@register="register4"/>2.在脚本中importimportUrAdspotsMapModalfrom'./components/UrAdspotsMapModal.vue'3.在script里注册const[register4,{openMo......
  • C++如何在main函数之前执行自定义操作
    目录一.前言二.利用全局变量的初始化机制1.利用构造函数2.用函数结果对全局变量赋值三.gcc可以利用__attribute__四.其他一.前言我们知道C++程序在main函数运行之前会先执行一些动作,比如一系列初始化动作,那么我们怎么让C++程序在main函数运行前执行一些自定义函数呢......
  • vim matchit 自定义配对关键字之间的跳转
    vim因其强大的扩展性一直深受linux程序员的喜爱,最近在用vim写verilog的时候,由于一个逻辑块中的beginend较多,常常会多写或者漏掉匹配关键字,很是苦恼,于是寻找匹配关键字间跳转的方法,发现matchit可以用%在关键字之间实现跳转,还可以自定义更多的关键字,相当方便。以下正片:1、安装ma......
  • Unity自定义图片数字TextMeshPro
    本文转载自https://www.cnblogs.com/sailJs/p/181689221、首先要有一张包含了图片字的图集,每个图片字一个Spirte 2、然后右键-> 创建创建好的TMP_SpriteAsset 3、编辑SpriteCharacterTable调整顺序,将index和图片数字对上修改下Unicode值(默认都是0xFFFE),比如9的Un......
  • vue3自定义指令,全局注册
    1这是directive.js注册的的importtype{Directive,DirectiveBinding}from"vue";importuseUserStorefrom"@/stores/user";import{createPinia}from"pinia";constuserStore=useUserStore(createPinia());//buttonList:["......
  • 【信创】Linux上如何创建和管理自定义的 systemd 服务 _ 统信 _ 麒麟 _ 方德
    原文链接:【信创】Linux上如何创建和管理自定义的systemd服务|统信|麒麟|方德Hello,大家好啊!今天给大家带来一篇关于在Linux系统上如何创建和管理自己的systemd服务的文章。systemd是Linux系统中的初始化系统和服务管理器,它为系统提供了强大的服务管理功能。通过创建和......
  • Day 19 回溯法part01| LeetCode 77.组合,216. 组合总和 III,17. 电话号码的字母组合
    理论基础回溯法(回溯搜索法)回溯函数就是递归函数本质是穷举解决的问题组合问题(不强调元素顺序,需去重)切割问题子集问题:一个N个数的集合里有多少符合条件的子集排列问题(强调元素顺序)棋盘问题:N皇后回溯法模板(可抽象为树形结构——N叉树来解决问题)递归返回值以及......
  • 【项目实战】如何在项目中自定义错误码
    在项目设计阶段,前端需要根据后端返回的响应来对前端页面进行渲染(比如404页面),通过自定义错误码,可以及时收集并且处理异常信息。自定义错误码几个具体的应用1.错误信息统一处理:全局异常处理器可以将不同种类的异常转化为统一的错误信息格式,提供一致的错误响应给客户端,增强了用......
  • Day18 二叉树part08| LeetCode 669. 修剪二叉搜索树 , 108.将有序数组转换为二叉搜索树
    669.修剪二叉搜索树669.修剪二叉搜索树classSolution{publicTreeNodetrimBST(TreeNoderoot,intlow,inthigh){if(root==null)returnnull;//处理节点值<low的情况:当前节点及其左子树的所有节点都不在范围内,继续在其右子树上修......