2014-11-23 76 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