字符串分割

CREATE FUNCTION FC_SPLITSTR (
    "SRCSQL" VARCHAR(2000),
    "SPT" VARCHAR(10),
    "P_TYPE" VARCHAR(1) )
  RETURNS TABLE  (
    "RE_STR" VARCHAR(200),
    "RE_INT" INTEGER )
  SPECIFIC "SQL120907104745200"
  LANGUAGE SQL
  NOT DETERMINISTIC
  EXTERNAL ACTION
  READS SQL DATA
F1: BEGIN ATOMIC
/**************************************************************************
    *过程名称: 字符串拆分函数
    *过程功能: 将字符串根据间隔字符分开
    *输入参数: 待分拆的字符串
                 分割符
    *输出参数: tables
 
    *修改比率:
    *修改内容:增加了类型转换
    *返回的表有两个字段,如果RE_STR,RE_INT,根据传入的类型转换自己判断
    --参数(需要分割的字符串,分隔符,类型转换('0'字符串,'1'整数))
SELECT RE_INT FROM table(FC_SPLITSTR('1,2,3,4',',','1'));--

SELECT RE_STR FROM table(FC_SPLITSTR('ABC,DEF,G,H',',','0'));--
    ***************************************************************************/
RETURN
      WITH n(str, ori, pos)AS (
      VALUES(srcsql || spt,1,locate(spt,srcsql || spt))
      UNION ALL
      SELECT
          str,pos + length(spt),locate(spt,str,pos + length(spt))
      FROM n
      WHERE
      locate(spt,str,pos + length(spt)) > 0
      ),sptTT AS(
        SELECT substr(str,ori,pos - ori) AS RE_STR FROM n
      )
      SELECT
       RE_STR,
      (CASE WHEN P_TYPE IS NULL THEN -1 WHEN '1'=P_TYPE THEN Integer(trim(char(RE_STR)))  ELSE NULL END ) AS RE_INT
      FROM
          sptTT
      where
          (COALESCE(sptTT.RE_STR,'')!= '')
          AND TRIM(RE_STR)!=''
      ;--
END;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值