2014-11-23 45 views
1

我有一个字符串,像这样:查找字符串值

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

我正在写将接收该值作为参数,另一个参数为UserName

功能

我需要从给定的字符串,这是admin

找到关键用户名的值我在搜索是否有一个在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; 

没有更好的方法?谢谢。

回答

2

你可以用正则表达式做到这一点:

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

的一般方法是

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

此单行甚至不需要和额外的“”到底,以确保适当的工作。它只是完美的作品。 – DoomerDGR8 2014-11-24 06:50:29