功能返回需要适当的情况

问题描述 投票:0回答:1

我需要一个使列名具有值的函数

values(

feature plush

^Ido ^3d

^Imc Toys

^Tmnt - ^Lpl

^Bo-po

)

像这样,并像这样返回它

(

Feature Plush

IDO 3D

IMC Toys

TMNT - LPL

BO-PO

)

请帮我

sql oracle
1个回答
0
投票

以下功能适用于您的要求。

CREATE OR REPLACE Function DOING_XX (String_In IN Varchar2) Return Varchar2 Is

i Number(2);
string_out varchar2(1000) := '';

Begin

    FOR i in 1..((LENGTH(String_In) - LENGTH(REPLACE(String_In,' ','')) ) + 1)
    LOOP

        If i != 1 
        Then 
            string_out := String_out||' ';
        End If;

        If( SubStr( REGEXP_SUBSTR(String_In,'[^ ]+',1,i) , 1 , 1) = '^' )
        Then
            string_out := String_out || UPPER(SubStr(REGEXP_SUBSTR(String_In,'[^ ]+',1,i),2));
        Else
            string_out := String_out || INITCAP(REGEXP_SUBSTR(String_In,'[^ ]+',1,i));
        End If;

    End LOOP;

    Return trim(string_out);

End;
/

with x as(
select 'feature    plush' a from dual union all
select '^Ido ^3d' a from dual union all
select '^Imc Toys' a from dual union all
select '^Tmnt - ^Lpl' a from dual union all
select '^Bo-po' a from dual
)
select DOING_XX(a) from x

我想告诉你,它将返回不需要的尾随空格,以防两个空间之间的空格数量!= 1.为此你需要一个更好的regexp_substr来捕获它。 Return trim(string_out)是同样的临时修复。

© www.soinside.com 2019 - 2024. All rights reserved.