在SAP HANA中没有内置类似Oracle的 split() 字符串拆分函数,需要自行写存储过程来实现,本文介绍了实现的一种方式。
思路是创建一个存储过程,该存储过程有两个输入参数,分别是【待拆分字符串】和【拆分符号】,根据符号对字符串进行拆分,与split函数类似。
例如:'A,B,C' 和 ',' 。
本程序较为简单,详细逻辑可以参考代码的注释:
CREATE PROCEDURE "SCHEMA_NAME"."PROC_NAME" (TEXT nvarchar(2000),SYMBOL nvarchar(10))
-- 输入参数,TEXT为待拆分字符串,SYMBOL为拆分符号,例如TEXT = '1,2,3',SYMBOL = ','
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
declare _items nvarchar(200) ARRAY; -- 创建数组变量,用于存放拆分后的字符串
declare _text nvarchar(2000); -- 创建字符串变量,用于存放拆分前和每次拆分后剩余的字符串
declare _index integer; --创建int变量,用于计数器
_text := :TEXT; --获取输入的待拆分字符串参数
_index := 1; -- 计数器
WHILE LOCATE(:_text,SYMBOL) > DO -- 当输入的字符串中,能够查找到拆分符号时,进入循环
_items[:_index] := SUBSTR_BEFORE(:_text,SYMBOL); -- 查找待拆分字符串中,在拆分符号前的字符,放入数组
_text := SUBSTR_AFTER(:_text,SYMBOL); -- 将待拆分字符串中中,拆分符号后的字符放入 _text 变量
_index := :_index + 1; -- 计数器 + 1
END WHILE;
_items[:_index] := :_text; -- 循环结束将后一个拆分符号后的字符放入数组
rst = UNNEST(:_items) AS ("items"); -- 将数组转换为临时表
SELECT * FROM :rst; -- 输出结果
END;
测试调用一下:
在实际使用时可能根据需要调整输出结果的格式。
来源 https://www.modb.pro/db/375200