根据给定字符串中的字符串键查找字符串值

时间:2014-11-23 12:31:52

标签: oracle plsql

我有一个像这样的字符串:

Directory=Voice Active Directory A,ID=VT-AD1,Location=Canada,UserName=admin,Password=passw0rd,Selector=AD1

我正在编写一个函数,它将此值作为参数接收,另一个参数作为UserName

我需要从给定字符串admin

中找到针对关键UserName的值

我正在搜索oracle中是否有一个RegEx来帮助这里。

这是我到目前为止所做的:

CREATE OR REPLACE FUNCTION GET_CSV_FIELD(Parameter_RowData IN CLOB, Parameter_Field_Name IN VARCHAR2 )
  RETURN VARCHAR2
AS
  Found_Index INTEGER;
  End_Index INTEGER;
  Pair_Index INTEGER;

  Return_Result VARCHAR2(4000); 

BEGIN

   Found_Index := INSTR(Parameter_RowData, Parameter_Field_Name);

   IF Found_Index > 0 THEN
    End_Index := INSTR(Parameter_RowData, ',', Found_Index);
    Pair_Index := INSTR(Parameter_RowData, '=', Found_Index);

    IF End_Index = 0 THEN
      Return_Result := '';
      RETURN Return_Result;
    END IF;

    IF Pair_Index = 0 THEN
      Return_Result := '';
      RETURN Return_Result;
    END IF;   

    Return_Result := SUBSTR(Parameter_RowData, Pair_Index + 1, End_Index - Pair_Index - 1);
   ELSE
    Return_Result := '';    
   END IF;

RETURN Return_Result;
END;

有更好的方法吗?感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式执行此操作:

select substr(regexp_substr(str, 'UserName=[^,]+'), 10)

一般方法是

select substr(regexp_substr(str, v_param || '=[^,]+'), length(v_param) + 2)