[Oracle]: Oracle 分隔字符串方法

  1. Function
/**
 *  Split the string according to the separator.
 *
 *  @param I_VALUES: String is divided
 *  @param I_SEPARATOR: Separator
 *  @return ARRAY_STRING: String array
 */
CREATE OR REPLACE
FUNCTION FN_SPLIT
(
    I_VALUES     IN VARCHAR2,
    I_SEPARATOR  IN VARCHAR2
)   RETURN ARRAY_STRING 
AS
    V_STR VARCHAR2(200);
    V_SEPARATOR VARCHAR2(10);
    V_LENGTH NUMBER;
    V_START NUMBER := 1;
    V_END   NUMBER;
    V_INDEX NUMBER := 1;
    O_ARRAY_STRING ARRAY_STRING;
BEGIN
    O_ARRAY_STRING := ARRAY_STRING();
    V_SEPARATOR := NVL(I_SEPARATOR, ',');
    V_STR := LTRIM(RTRIM(I_VALUES));
    V_LENGTH := LENGTH(V_STR);

    WHILE (V_START <= V_LENGTH)
      LOOP
        V_END := INSTR(V_STR, V_SEPARATOR, V_START);
        IF V_END = 0 THEN
            IF LTRIM(RTRIM(SUBSTR(V_STR, V_START))) IS NOT NULL THEN
                O_ARRAY_STRING.extend;
                O_ARRAY_STRING(V_INDEX) := LTRIM(RTRIM(SUBSTR(V_STR,V_START)));
                V_INDEX := V_INDEX + 1;
            END IF;
            V_START := V_LENGTH + 1;
        ELSE
            IF LTRIM(RTRIM(SUBSTR(V_STR, V_START, V_END - V_START))) IS NOT NULL THEN 
                O_ARRAY_STRING.extend;
                O_ARRAY_STRING(V_INDEX) := LTRIM(RTRIM(SUBSTR(V_STR, V_START, V_END - V_START)));
                V_INDEX := V_INDEX + 1;
            END IF;
            V_START := V_END + 1;
        END IF;
      END LOOP;
END FN_SPLIT
  1. Test
/*********** FN_SPLIT TEST *************/
DECLARE 
  I_VALUES VARCHAR2(200);
  I_SEPARATOR VARCHAR2(10);
  V_Return ARRAY_STRING;
BEGIN
  I_VALUES := 'AAA,  BB  , CCC';
  I_SEPARATOR := '';

  V_Return := FN_SPLIT(
    I_VALUES => I_VALUES,
    I_SEPARATOR => I_SEPARATOR
  );

  FOR i IN 1 .. V_Return.count LOOP
    DBMS_OUTPUT.PUT_LINE(i || ': ' || V_Return(i));
  END LOOP;
END;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值