Sql 子串函数

Sql 子串函数,sql,plsql,Sql,Plsql,列的输出类似于“Arpit Bansal Doctor ALC FU JP-111DC”。我想提取-之间的数据,例如Bansal 请建议使用哪一个函数以及如何使用。您可以使用内置函数,如下所示: select substr(col,instr(col,'-')+1,instr(col,'-',1,2)-instr(col,'-')-1) from (select 'Arpit-Bansal-Doctor-ALC FU JP-111DC' col from dual); INSTR函数调用用于

列的输出类似于“Arpit Bansal Doctor ALC FU JP-111DC”。我想提取
-
之间的数据,例如
Bansal


请建议使用哪一个函数以及如何使用。

您可以使用内置函数,如下所示:

select substr(col,instr(col,'-')+1,instr(col,'-',1,2)-instr(col,'-')-1) 
from (select 'Arpit-Bansal-Doctor-ALC FU JP-111DC' col from dual);
INSTR函数调用用于查找第一个和第二个连字符,然后SUBSTR用于获取它们之间的字符串

这相当麻烦,因此如果您希望将所有5个值分隔开,并且您使用的是PL/SQL,则可以使用以下方法将它们分隔开:

declare
   array apex_application_global.vc_arr2;
begin
   array := apex_util.string_to_table ('Arpit-Bansal-Doctor-ALC FU JP-111DC', '-');
   for i in 1..array.count loop
       dbms_output.put_Line ('Part' || i || ' is '||array(i));
   end loop;
end;
另一种方法:

select regexp_substr('Arpit-Bansal-Doctor-ALC FU JP-111DC', '[^-]+')
from dual;

Arpit

select regexp_substr('Arpit-Bansal-Doctor-ALC FU JP-111DC', '[^-]+', 1, 2)
from dual;

Bansal

select regexp_substr('Arpit-Bansal-Doctor-ALC FU JP-111DC', '[^-]+', 1, 3)
from dual;

Doctor

select regexp_substr('Arpit-Bansal-Doctor-ALC FU JP-111DC', '[^-]+', 1, 4)
from dual;

ALC FU JP

为什么不是“医生”?或者“Bansal Doctor”?或者为什么不
ALC FU JP
您是说列值是由5个连字符分隔的值串联而成,即“Arpit”、“Bansal”、“Doctor”、“ALC FU JP”、“111DC”,并且您只想得到第二个值?是的,您是对的,我想分别提取所有值,如:1。Arpit2.Bansal,博士,@TonyAndrews你是对的,但现在我想利用连字符单独提取值。