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;