SAP HANA 字符串拆分

2022-05-07 00:00:00 拆分 变量 字符串 数组 符号

在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

    相关文章